日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python写出雷霆战机_仿《雷霆战机》飞行射击手游开发--游戏的入口

發布時間:2023/12/29 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python写出雷霆战机_仿《雷霆战机》飞行射击手游开发--游戏的入口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

游戲的入口AppDelegate

游戲啟動后,首先實例化的是AppDelegate這個類,這這個類里,我們需要修改兩個函數:applicationDidFinishLaunching和applicationDidEnterBackground。

首先介紹applicationDidFinishLaunching(),游戲啟動后,首先進入的就是這個方法,這里,我們可以設置游戲的分辨率、幀率、第三方SDK的初始化,以及第一次要出現的場景。

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;

}

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

創建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(GameLayer::getPlaneLayer());

HubLayer* pHubLayer = dynamic_cast(GameLayer::getHubLayer());

if (pHubLayer && pPlaneLayer && !pPlaneLayer->isPause())

{

pHubLayer->menuPauseCallback(nullptr);

}

}

這里我們只需要知道我們做了暫停游戲的動作,即menuPauseCallback,這時游戲會彈出暫停場景。上面函數中的一些類和方法,我們會在后面講到。

總結

以上是生活随笔為你收集整理的python写出雷霆战机_仿《雷霆战机》飞行射击手游开发--游戏的入口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。