Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 仿《雷霆戰機》飛行射擊手游開發--游戲的入口,《雷霆戰機》射擊手

仿《雷霆戰機》飛行射擊手游開發--游戲的入口,《雷霆戰機》射擊手

編輯:關於android開發

仿《雷霆戰機》飛行射擊手游開發--游戲的入口,《雷霆戰機》射擊手


游戲的入口AppDelegate

    游戲啟動後,首先實例化的是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 }

      這裡需要注意下面這幾點:

創建Windows窗口

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的取值范圍如下:

  • ResolutionPolicy::SHOW_ALL 屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(小)者作為寬、高的縮放因子。保證了設計區域全部顯示到屏幕上,但可能會有黑邊。
  • ResolutionPolicy::EXACT_FIT  屏幕寬 與 設計寬比 作為X方向的縮放因子,屏幕高 與 設計高比 作為Y方向的縮放因子。保證了設計區域完全鋪滿屏幕,但是可能會出現圖像拉伸。
  • ResolutionPolicy::NO_BORDER  屏幕寬、高分別和設計分辨率寬、高計算縮放因子,取較(大)者作為寬、高的縮放因子。保證了設計區域總能一個方向上鋪滿屏幕,而另一個方向一般會超出屏幕區域。
  • ResolutionPolicy::FIXED_HEIGHT和ResolutionPolicy::FIXED_WIDTH都是會在內部修正傳入設計分辨率,以保證屏幕分辨率到設計分辨率無拉伸鋪滿屏幕。

    在本程序中,我們根據屏幕的寬高獲知當前是橫屏還是豎屏。如果是豎屏,則采用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類探究游戲資源載入機制

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved