Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景
来源:互联网 发布:淘宝皮毛一体女装品牌 编辑:程序博客网 时间:2024/05/01 23:26
游戏结束场景就没什么好介绍的了,跟第一个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(),"Arial",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
0 0
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(二)素材准备与游戏菜单场景
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(四)游戏场景:背景与我机的创建、敌机的创建、物理世界构建
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(一)环境与创建项目
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(三)物理引擎的使用
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(五)敌我碰撞处理、分数计算、音乐播放
- 【cocos2d-x 3.7 飞机大战】 决战南海I (十二) 游戏结束场景
- Cocos2d-x学习笔记三之飞机游戏详解
- cocos2d-x SpaceFighting类似打飞机游戏小项目
- Cocos2d-x简单游戏<打飞机>代码实现|第一部分:飞机类
- Cocos2d-x学习笔记三之飞机游戏详解之GameManager和GameMenu类的讲解。
- Cocos2d-x学习笔记三之飞机游戏详解之GameScene类的讲解
- Cocos2d-x学习笔记三之飞机游戏详解之GameOver类的讲解
- cocos2d-x 菜鸟学习笔记四(游戏场景与场景切换)
- Cocos2d-x学习笔记一 创建场景
- 【Cocos2d-x 3.0学习笔记】场景切换
- cocos2d-x 2.x打飞机(一)
- cocos2d-x 2.x打飞机(二)
- 第3章1节《MonkeyRunner源码剖析》脚本编写示例: MonkeyRunner API使用示例(原创)
- HDU 1247 Hat’s Words 字典树
- java工程师面试题大全-100%公司笔试题你都能碰到几个
- 离开家乡的人,习惯在外的漂泊,回不去了
- 浅谈 C++ 中的 new/delete 和 new[]/delete[]
- Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景
- MFC单文档/多文档程序各类之间的跳转总结
- ORACLE11g RAC 升级 11.2.0.3 -> 11.2.0.4
- SVM 支持向量机
- ajax简介
- 嵌入式c语言中printf函数的使用(一)——将MCU的UART、IIC、或SPI与printf函数连接
- Oracle数据库远程导入、导出
- QT事件传递与事件过滤器
- 程序怎么跑?(1)--linux 课程学习笔记