Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2d-x 3.x学习笔记:猩先生带你打飞机(六)游戏结束场景大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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",current@R_944_6909@->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",top@R_944_6909@->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中在游戏结束的逻辑那里添加场景切换代码。@H_450_3@

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

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

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。