Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景

Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景,第1张

概述游戏结束场景就没什么好介绍的了,跟第一个HelloWorld场景差不多,只是修改了背景图片,去掉了飞机,添加了显示分数和最高分的label。下面看看是如何实现的。 先创建GameOverScene.cpp文件和GameOverScene.h文件。头文件声明如下: static cocos2d::Scene* createScene();

游戏结束场景就没什么好介绍的了,跟第一个HelloWorld场景差不多,只是修改了背景图片,去掉了飞机,添加了显示分数和最高分的label。下面看看是如何实现的。
先创建GameOverScene.cpp文件和GameOverScene.h文件。头文件声明如下:

static cocos2d::Scene* createScene();                                    //创建场景的方法,其实就是把当前的层封装成Scene返回去,注意是静态方法。virtual bool init();                                                                    //层初始化时调用CREATE_FUNC(GameOverScene);                                           //一个宏,其实是层创建的方法,以上三个方法都是cocos2d固定的场景创建的方法。  voID continueGame(cocos2d::Ref* pSender);                      //菜单项开始游戏的回调方法voID exitGame(cocos2d::Ref* pSender);                                //菜单项退出游戏的回调方法

这些代码也不需要怎么解释了,都是一些用过的。下面是实现。

bool GameOverScene::init(){ if ( !Layer::init() ) {  return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); //创建背景 auto bg = Sprite::create("gameover.png"); bg->setposition(Vec2(origin.x + visibleSize.wIDth/2,visibleSize.height/2)); bg->setAnchorPoint(Vec2(0.5,0.5)); this->addChild(bg,0); int currentscore = UserDefault::getInstance()->getIntegerForKey("currentscore");                //读取出上个场景存储进来的分数和最高分数 int topscore = UserDefault::getInstance()->getIntegerForKey("topscore"); //显示最终分数 auto label = cocos2d::Label::createWithSystemFont(__String::createWithFormat("%d",currentscore)->getCString(),"Arial",24); label->setposition(Vec2(visibleSize.wIDth/2,origin.y + visibleSize.height/2 + 60)); label->setHorizontalAlignment(kCCTextAlignmentRight); label->setAnchorPoint(Vec2(0.5,0.5)); this->addChild(label,1); //显示最高分数 auto label2 = cocos2d::Label::createWithSystemFont(__String::createWithFormat("%d",topscore)->getCString(),24); label2->setposition(Vec2(visibleSize.wIDth/2,origin.y + visibleSize.height-label2->getContentSize().height)); label2->setHorizontalAlignment(kCCTextAlignmentRight); label2->setAnchorPoint(Vec2(0.5,0.5)); this->addChild(label2,1); //继续游戏菜单项  auto startItem = MenuItemImage::create( "game_start.png","game_start2.png",CC_CALLBACK_1(GameOverScene::continueGame,this)); startItem->setposition(Vec2(visibleSize.wIDth/2 + origin.x,visibleSize.height/2 + origin.y)); //退出游戏菜单项 auto closeItem = MenuItemImage::create( "game_exit.png","game_exit2.png",CC_CALLBACK_1(GameOverScene::exitGame,this)); closeItem->setposition(Vec2(origin.x + visibleSize.wIDth/2,visibleSize.height/2 + origin.y - startItem->getContentSize().height));    //把菜单项添加到菜单精灵中 auto menu = Menu::create(startItem,closeItem,NulL); menu->setposition(Vec2::ZERO); //把菜单精灵添加到当前的层中 this->addChild(menu,1); return true;}//继续游戏菜单项的回调函数voID GameOverScene::continueGame(Ref* pSender){ auto scene = GameScene::createScene();                                //又进到游戏场景中去 auto gameScene = TransitionSlIDeInR::create(1.0f,scene);     //场景切换的方式 Director::getInstance()->replaceScene(gameScene);              //切换}//退出游戏的回调方法voID GameOverScene::exitGame(Ref* pSender){ #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) MessageBox("You pressed the close button. windows Store Apps do not implement a close button.","Alert");    return;#endif    Director::getInstance()->end();  //退出#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)    exit(0);#endif}

最后,别忘了是在GameScene中在游戏结束的逻辑那里添加场景切换代码。

//游戏结束voID GameScene::gameOver(){    auto scene = GameOverScene::createScene();    auto gameOverScene = TransitionTurnOffTiles::create(1.0f,scene);    Director::getInstance()->replaceScene(gameOverScene);}

好了,到这里我们整个游戏的核心模块就已经搞定了,当然还有许多不足的地方可以完善,有兴趣的同学可以完善。
下面看看整个游戏运行过程。

之后我会把我在学习cocos2d-x的过程中所遇到的疑难杂症发布到博客上,欢迎大家来讨论学习,谢谢。
最终源码:源码4

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景全部内容,希望文章能够帮你解决Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1045440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存