• 【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()));
    }


  • 相关阅读:
    Effective C++学习笔记之explicit
    腾讯面试经验2
    腾讯面试经验
    值类型和引用类型的区别,struct和class的区别
    【转载】固态硬盘的S.M.A.R.T详解
    SSD的传输总线、传输协议、传输接口
    坏块管理(Bad Block Management,BBM)
    脱离SVN的控制
    Func的介绍
    简单AOP
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7089186.html
Copyright © 2020-2023  润新知