編輯:關於android開發
游戲啟動後,首先實例化的是AppDelegate這個類,這這個類裡,我們需要修改兩個函數:applicationDidFinishLaunching和applicationDidEnterBackground。
首先介紹applicationDidFinishLaunching(),游戲啟動後,首先進入的就是這個方法,這裡,我們可以設置游戲的分辨率、幀率、第三方SDK的初始化,以及第一次要出現的場景。
1 bool AppDelegate::applicationDidFinishLaunching() 2 { 3 auto director = Director::getInstance(); 4 auto glview = director->getOpenGLView(); 5 if (!glview) { 6 //定義在Windows下運行窗口的大小 7 glview = GLViewImpl::createWithRect("Raiden", 8 Rect(0, 0, CONSTANT::DESIGN_RES_WIDTH * CONSTANT::RES_RATIO, CONSTANT::DESIGN_RES_HEIGHT * CONSTANT::RES_RATIO)); 9 director->setOpenGLView(glview); 10 } 11 12 //橫屏和豎屏選擇不同的縮放模式 13 auto frameSize = glview->getFrameSize(); 14 if (frameSize.width >= frameSize.height) 15 { 16 director->getOpenGLView()->setDesignResolutionSize(CONSTANT::DESIGN_RES_WIDTH, CONSTANT::DESIGN_RES_HEIGHT, ResolutionPolicy::SHOW_ALL); 17 } 18 else 19 { 20 director->getOpenGLView()->setDesignResolutionSize(CONSTANT::DESIGN_RES_WIDTH, CONSTANT::DESIGN_RES_HEIGHT, ResolutionPolicy::EXACT_FIT); 21 } 22 23 //設置幀率為60幀/秒 24 director->setAnimationInterval(1.0f / 60); 25 //設置搜索路徑 26 FileUtils::getInstance()->addSearchPath("res"); 27 28 //創建第一個要進入的場景 29 auto scene = LoadingLayer::scene(); 30 31 //進入場景 32 director->runWithScene(scene); 33 //初始化第三方SDK 34 BmobSDKInit::initialize("app_id", "app_key"); 35 36 return true; 37 }
這裡需要注意下面這幾點:
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)定義了窗口的大小,其中的幾個宏的定義如下:
const float DESIGN_RES_WIDTH = 540; //寬度 const float DESIGN_RES_HEIGHT = 960; //高度 const float RES_RATIO = 0.75f;
由於本人的筆記本的高度小於960的,所以這裡使用RES_RATIO來進行同比例縮小。如果這裡不縮小窗口,則游戲窗口則會顯示不全,而且更為嚴重的,是會出現鼠標點擊定位不准的問題。
我們使用了setDesignResolutionSize這個函數來設置縮放模式,其中,ResolutionPolicy的取值范圍如下:
在本程序中,我們根據屏幕的寬高獲知當前是橫屏還是豎屏。如果是豎屏,則采用EXACT_FIT,以保證無黑邊的全屏模式;如果是橫屏,則采用SHOW_ALL,以防止游戲界面縮放變形。
當用戶接了一個電話,或者按了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,這時游戲會彈出暫停場景。上面函數中的一些類和方法,我們會在後面講到。
下載源代碼
下一篇,我們將進入LoadingLayer類探究游戲資源載入機制
android之文件操作——讀取assets和raw文件下的內容,androidassets1.分別創建assets文件夾和res/raw文件夾:(要注意的raw文件是在
Android 應用程序的反編譯,android反編譯1、ApkTool工具 安裝ApkTool工具,該工具可以解碼得到資源文件,但不能得到Java源文件。安裝環境:需要
使用SharePreferences存取數據(慕課筆記 ),sharepreferences0.視頻地址:http://www.imooc.com/video/3265
Android Quick Search in Settings,androidquick歡迎大家加入群裡交流:429664282 基於:android-6.0.1_r1