【cocos2d-x 3.7 飞机大战】 决战南海I (十二) 游戏结束场景

        游戏结束的时候,要显示分数。还要可以选择是返回主场景还是退出游戏


	// 退出游戏
	void menuCloseCallback(cocos2d::Ref* pSender);

	// 返回主界面
	void menuMainCallback(cocos2d::Ref* pSender);


实现该功能的代码例如以下

bool GameOver::init()
{
	//////////////////////////////
	// 1. super init first
	if (!Layer::init())
	{
		return false;
	}

	bool bRect = false;

	//背景音乐
	if (CocosDenshion::SimpleAudioEngine::getInstance()->isBackgroundMusicPlaying())
	{
		CocosDenshion::SimpleAudioEngine::getInstance()->stopBackgroundMusic(true);
		CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/game_over.mp3", true);
	}

	do 
	{
		Size visibleSize = Director::getInstance()->getVisibleSize();
		Vec2 origin = Director::getInstance()->getVisibleOrigin();

		//加入背景图片
		auto m_background = Sprite::createWithSpriteFrameName("backgroundGameOver.png");
		m_background->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));
		m_background->setAnchorPoint(Vec2(0.5, 0.5));
		CC_BREAK_IF(!m_background);

		this->addChild(m_background);

		//加入分数
		auto score_int = UserDefault::getInstance()->getIntegerForKey("currentScore");
		auto score_str = __String::createWithFormat("%d", score_int);
		auto score = Label::createWithTTF(score_str->getCString(), "fonts/DFPShaoNvW5-GB.ttf", 40);
		score->setPosition(Point(visibleSize.width / 2, visibleSize.height/3*2));
		score->setColor(Color3B(255, 0, 0));
		CC_BREAK_IF(!score);

		this->addChild(score);

		//设定等级

		//设置标签 并 获取中文文本
		auto dictionary = Dictionary::createWithContentsOfFile("fonts/AboutMe.xml");
		String rank_str;

		switch (score_int/1000)
		{
		case 0:
			rank_str = ((__String*)(dictionary->objectForKey("Eleven")))->getCString();
			break;
		case 1:
			rank_str = ((__String*)(dictionary->objectForKey("Ten")))->getCString();
			break;
		case 2:
			rank_str = ((__String*)(dictionary->objectForKey("Nine")))->getCString();
			break;
		case 3:
			rank_str = ((__String*)(dictionary->objectForKey("Eight")))->getCString();
			break;
		case 4:
			rank_str = ((__String*)(dictionary->objectForKey("Seven")))->getCString();
			break;
		case 5:
			rank_str = ((__String*)(dictionary->objectForKey("Six")))->getCString();
			break;
		case 6:
			rank_str = ((__String*)(dictionary->objectForKey("Five")))->getCString();
			break;
		case 7:
			rank_str = ((__String*)(dictionary->objectForKey("Four")))->getCString();
			break;
		case 8:
			rank_str = ((__String*)(dictionary->objectForKey("Three")))->getCString();
			break;
		case 9:
			rank_str = ((__String*)(dictionary->objectForKey("Two")))->getCString();
			break;
		case 10:
			rank_str = ((__String*)(dictionary->objectForKey("One")))->getCString();
			break;
		default:
			rank_str = ((__String*)(dictionary->objectForKey("Zere")))->getCString();
			break;
		};

		auto m_label1 = Label::createWithTTF(
			rank_str.getCString(),
			"fonts/DFPShaoNvW5-GB.ttf",
			65
			);
		m_label1->setColor(Color3B(255, 0, 0));
		m_label1->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2 - m_label1->getContentSize().height));

		this->addChild(m_label1);


		/////////////////////////////
		// 2. add a menu item with "X" image, which is clicked to quit the program
		//    you may modify it.

		//退出游戏 button
		auto tempClose1 = Sprite::createWithSpriteFrameName("GameOver_nor.png");
		auto tempClose2 = Sprite::createWithSpriteFrameName("GameOver_touched.png");

		auto closeItem = MenuItemSprite::create(
			tempClose1, tempClose2, CC_CALLBACK_1(GameOver::menuCloseCallback, this)
			);

		//返回主界面 button
		auto tempBack1 = Sprite::createWithSpriteFrameName("ReturnGame_nor.png");
		auto tempBack2 = Sprite::createWithSpriteFrameName("ReturnGame_touched.png");

		auto backItem = MenuItemSprite::create(
			tempBack1, tempBack2, CC_CALLBACK_1(GameOver::menuMainCallback, this)
			);

		// create menu, it's an autorelease object
		auto menu = Menu::create(closeItem, backItem, NULL);
		menu->alignItemsVerticallyWithPadding(closeItem->getContentSize().height / 2);
		menu->setPosition(Vec2(origin.x + visibleSize.width / 2, visibleSize.height / 4));
		CC_BREAK_IF(!menu);

		this->addChild(menu, 1);

		bRect = true;
	} while (0);

	/////////////////////////////
	// 3. add your codes below...


	return true;
}

// 退出游戏
void GameOver::menuCloseCallback(Ref* pSender)
{
	Director::getInstance()->end();

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
	exit(0);
#endif
}

// 返回主界面
void GameOver::menuMainCallback(cocos2d::Ref* pSender)
{
	CocosDenshion::SimpleAudioEngine::getInstance()->stopBackgroundMusic(true);
	Director::getInstance()->replaceScene(TransitionProgressRadialCCW::create(0.8f,HelloWorld::createScene()));
}


原文地址:https://www.cnblogs.com/wzjhoutai/p/7089186.html