遊戲啓動後,首先實例化的是AppDelegate這個類,這這個類裏,咱們須要修改兩個函數:applicationDidFinishLaunching和applicationDidEnterBackground。android
首先介紹applicationDidFinishLaunching(),遊戲啓動後,首先進入的就是這個方法,這裏,咱們能夠設置遊戲的分辨率、幀率、第三方SDK的初始化,以及第一次要出現的場景。windows
bool AppDelegate::applicationDidFinishLaunching() { auto director = Director::getInstance(); auto glview = director->getOpenGLView(); if (!glview) { //定義在Windows下運行窗口的大小 glview = GLViewImpl::createWithRect("Raiden", Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO)); director->setOpenGLView(glview); } //橫屏和豎屏選擇不一樣的縮放模式 auto frameSize = glview->getFrameSize(); if (frameSize.width >= frameSize.height) { director->getOpenGLView()->setDesignResolutionSize(CONSTANT::DESIGN_RES_WIDTH, CONSTANT::DESIGN_RES_HEIGHT, ResolutionPolicy::SHOW_ALL); } else { director->getOpenGLView()->setDesignResolutionSize(CONSTANT::DESIGN_RES_WIDTH, CONSTANT::DESIGN_RES_HEIGHT, ResolutionPolicy::EXACT_FIT); } //設置幀率爲60幀/秒 director->setAnimationInterval(1.0f / 60); //設置搜索路徑 FileUtils::getInstance()->addSearchPath("res"); //建立第一個要進入的場景 auto scene = LoadingLayer::scene(); //進入場景 director->runWithScene(scene); //初始化第三方SDK BmobSDKInit::initialize("app_id", "app_key"); return true; }
這裏須要注意下面這幾點:app
glview = GLViewImpl::createWithRect("Raiden", Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO));
這裏是爲在windows下運行的時候建立一個窗口。爲了調試方便,咱們在開發遊戲的時候會先在windows下編譯調試,等到windows版本調試通了,再編譯android版本。Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO)定義了窗口的大小,其中的幾個宏的定義以下:ide
const float DESIGN_RES_WIDTH = 540; //寬度 const float DESIGN_RES_HEIGHT = 960; //高度 const float RES_RATIO = 0.75f;
因爲本人的筆記本的高度小於960的,因此這裏使用RES_RATIO來進行同比例縮小。若是這裏不縮小窗口,則遊戲窗口則會顯示不全,並且更爲嚴重的,是會出現鼠標點擊定位不許的問題。函數
咱們使用了setDesignResolutionSize這個函數來設置縮放模式,其中,ResolutionPolicy的取值範圍以下:spa
在本程序中,咱們根據屏幕的寬高獲知當前是橫屏仍是豎屏。若是是豎屏,則採用EXACT_FIT,以保證無黑邊的全屏模式;若是是橫屏,則採用SHOW_ALL,以防止遊戲界面縮放變形。.net
當用戶接了一個電話,或者按了home鍵使得遊戲進入後臺後,就會觸發applicationDidEnterBackground()這個函數。設計
void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stopAnimation(); //判斷當前是否在遊戲中,若是是,則使遊戲暫停 PlaneLayer* pPlaneLayer = dynamic_cast<PlaneLayer*>(GameLayer::getPlaneLayer()); HubLayer* pHubLayer = dynamic_cast<HubLayer*>(GameLayer::getHubLayer()); if (pHubLayer && pPlaneLayer && !pPlaneLayer->isPause()) { pHubLayer->menuPauseCallback(nullptr); } }
這裏咱們只須要知道咱們作了暫停遊戲的動做,即menuPauseCallback,這時遊戲會彈出暫停場景。上面函數中的一些類和方法,咱們會在後面講到。調試
轉載請註明:http://www.javashuo.com/article/p-nrteqlbs-ch.htmlcode