上一部分介紹到片頭動畫介紹後進入到菜單場景,場景效果如圖
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;
}
代碼比較簡單
未完待續...............