Cocos2d-x 3.2 大富翁遊戲項目開發-第三部分 菜單場景


上一部分介紹到片頭動畫介紹後進入到菜單場景,場景效果如圖




MenuScene.h頭文件如下:


class MenuScene : public LayerColor  
{
public:

    static Scene* createScene();
  
    virtual bool init();        
 
    CREATE_FUNC(MenuScene);

private:
	Size visibleSize; //窗口尺寸
	LabelTTF* settingsGameTTF; //場景文字
	void menuTouchDown (Object* pSender,Control::EventType event);// Menu點擊回調方法
	void addBackgroundSprite(); //添加場景背景方法
	void addMenuSprites();//添加Menu方法
	 
};

#endif


MenuScene.cpp部分代碼如下:



bool MenuScene::init()
{
	if ( !LayerColor::initWithColor(Color4B(255, 255, 255, 255)) )
    {
        return false;
    }
	visibleSize = Director::getInstance()->getVisibleSize();
                Vec2 origin = Director::getInstance()->getVisibleOrigin();

	addBackgroundSprite();//添加場景背景方法

	addMenuSprites(); //添加Menu方法


    return true;
}


void MenuScene::addBackgroundSprite()
{
                 //添加大富翁背景圖片,居中顯示
	Sprite* menuSpriteLogo= Sprite::create(MENU_LOGO);
	menuSpriteLogo->setPosition(ccp(visibleSize.width/2,visibleSize.height));
	menuSpriteLogo->setAnchorPoint(ccp(0.5,1));
	menuSpriteLogo->setScale(0.6f);
	addChild(menuSpriteLogo);


             //添加左邊彩虹圖片
	Sprite* rainBowSprite= Sprite::create(RAINBOW);
	rainBowSprite->setPosition(ccp(5,visibleSize.height-20));
	rainBowSprite->setAnchorPoint(ccp(0,1));
	rainBowSprite->setScale(0.3f);
	addChild(rainBowSprite);

               //讓彩虹圖片左右移動
	MoveBy* rainBowMove = MoveBy::create(1,ccp(8,0));
	MoveBy* rainBowMoveReverse = rainBowMove->reverse();
	Sequence* rainBowAction = Sequence::create(rainBowMove,rainBowMoveReverse,NULL);
	rainBowSprite->runAction(RepeatForever::create(rainBowAction));
}


void MenuScene:: addMenuSprites()
{
              //添加單機遊戲Menu  
	Scale9Sprite* btnNormal = Scale9Sprite::create(NORMAL_MENU); //設置菜單normal圖片
	Scale9Sprite* btnPress = Scale9Sprite::create(PRESS_MENU);// 設置菜單press圖片

	LabelTTF* singleGameTTF = LabelTTF::create(SINGLE_GAME ,FONT_MENU,Btn_FontSize);//創建菜單所需的Label對象
	ControlButton* singleGameBtn = ControlButton::create(singleGameTTF,btnNormal);//創建controlButton
	singleGameBtn->setBackgroundSpriteForState(btnPress, Control::State::SELECTED);//添加singleButton菜單的press效果圖片

	singleGameBtn->setPosition(ccp(visibleSize.width/2,visibleSize.height-200));//設置位置
	singleGameBtn->setPreferredSize(Size(Btn_Width,Btn_Height));//設置大小
	singleGameBtn->addTargetWithActionForControlEvents(this,cccontrol_selector(MenuScene::menuTouchDown),Control::EventType::TOUCH_DOWN);//設置點擊回調方法
	singleGameBtn->setTag(Btn_Single_Game_TAG);//設置Tag
	addChild(singleGameBtn);//添加menu

             //其他menu添加方法,同上類似,不再重複.
	………………………..

               //settings菜單不大一樣,該菜單點擊都有打開或關閉音效。
	Scale9Sprite* btnNormal3 = Scale9Sprite::create(NORMAL_MENU);
	Scale9Sprite* btnPress3 = Scale9Sprite::create(PRESS_MENU);

	bool music_on = UserDefault::getInstance()->getBoolForKey(MUSIC_ON_KEY,true);//獲取音效設置
LabelTTF* settingsGameTTF;
//如果音效開,則menu顯示on,如果關,顯示off
	if(music_on)
	{
		settingsGameTTF = LabelTTF::create(MUSIC_ON,FONT_MENU,Btn_FontSize);
	}else
	{
                              settingsGameTTF = LabelTTF::create(MUSIC_OFF,FONT_MENU,Btn_FontSize);
	}
	
	ControlButton* settingsGameBtn = ControlButton::create(settingsGameTTF,btnNormal3);
	settingsGameBtn->setBackgroundSpriteForState(btnPress3, Control::State::SELECTED);

	settingsGameBtn->setPosition(ccp(visibleSize.width/2,visibleSize.height-320));
	settingsGameBtn->setPreferredSize(Size(Btn_Width,Btn_Height));
	settingsGameBtn->addTargetWithActionForControlEvents(this,cccontrol_selector(MenuScene:: menuTouchDown),Control::EventType::TOUCH_DOWN);//添加setting回調
	settingsGameBtn->setTag(Btn_Music_TAG);
	addChild(settingsGameBtn);
                ………………………
}


Menu點擊的回調方法,根據點擊對象tag調用相應方法,此處主要的是case語句需要添加 { } 括號,否則編譯報錯


void MenuScene:: menuTouchDown(Object* pSender,Control::EventType event)
{
	log("single touched");
	ControlButton* button = (ControlButton*)pSender;
	int tag = button->getTag();
switch(tag)
	{
		case Btn_Single_Game_TAG:
			{
				log("single game");
				//Director::getInstance()->pushScene(MapChooseScene::createScene());
			}

		case Btn_Multi_Game_TAG:
			{
				log("multi game");
				break;
			}

		case Btn_Music_TAG:
			{
				bool music_on = UserDefault::getInstance()->getBoolForKey(MUSIC_ON_KEY,true);

				if(music_on)
				{
					UserDefault::getInstance()->setBoolForKey(MUSIC_ON_KEY,false);//設置音效關
					button->setTitleForState(MUSIC_OFF,Control::State::NORMAL);//讓menu文字顯示off
				}else
				{
					UserDefault::getInstance()->setBoolForKey(MUSIC_ON_KEY,true);//設置音效開
					button->setTitleForState(MUSIC_ON,Control::State::NORMAL);// 讓menu文字顯示on
				}
		
				break;
			}
		case Btn_Quit_Game_TAG:
			{
				log("quit game");
				//popupLayer();彈出退出對話框,代碼較多,後續編寫
				break;
			}
	   default:  
		   break;
	}

代碼比較簡單  


未完待續...............


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章