2.2主菜單場景
調用cocostudio編輯出來的場景,然後綁定一些按鍵響應。當選擇關卡時跨場景傳遞參數,即選擇了第幾關要傳入給遊戲場景,遊戲場景再根據選擇的關卡讀取相關的場景配置。這裡使用單例類來實作。其意圖是保證一個類僅有一個執行個體,并提供一個通路它的全局通路點,該執行個體被所有程式子產品共享。
#include "GlobalComm.h"
CGlobalComm* CGlobalComm::m_GlobalComm = NULL;
CGlobalComm* CGlobalComm::getInstance(){
if (m_GlobalComm == NULL) {
m_GlobalComm = new CGlobalComm();
if (m_GlobalComm && m_GlobalComm->init()) {
m_GlobalComm->autorelease();
m_GlobalComm->retain();
}
else {
CC_SAFE_DELETE(m_GlobalComm);
m_GlobalComm = NULL;
}
}
return m_GlobalComm;
}
bool CGlobalComm::init(){
return true;
}
這個單例類是全局唯一的,而且是靜态的。在建立單例類對象時,調用了autorelease函數,說明此單例類參與了cocos2dx的記憶體管理機制,為保持單例類引用,還要retain一下。然後在這個單例類中提供一些變量供全局全局使用。如下所示
CC_SYNTHESIZE(int, m_iGameLevel, iGameLevel);//獲得目前遊戲的等級
CC_SYNTHESIZE(int, m_iHaveChoose, iHaveChoose);//已經選擇卡片數
CC_SYNTHESIZE(int, m_iSun, iSun);//已經選擇卡片數
在選擇關卡時,改變傳入關卡值。
//開啟遊戲在一個標明的關卡
void CMainAdventurLayer::gameStartAtLevel(int iLevel)
{
this->removeFromParentAndCleanup(true);//把上一個層關掉
CGlobalComm::getInstance()->setiGameLevel(iLevel);//設定遊戲開始的關卡
CocosDenshion::SimpleAudioEngine::getInstance()->stopBackgroundMusic();//進入一個新的遊戲,把主菜單的背景音樂關掉
CSceneMgr::getInstance()->sceneChange(CSceneMgr::enGameScene);//遊戲場景切換進去
}
主場景完成效果