天天看點

cocos植物大戰僵屍(二)主菜單場景:單例類

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);//遊戲場景切換進去
}      

主場景完成效果

cocos植物大戰僵屍(二)主菜單場景:單例類

繼續閱讀