跳轉到內容

跨平臺遊戲程式設計與 gameplay3d/遊戲類的概述

來自 Wikibooks,開放世界中的開放書籍

gameplay::Game 類是使用 gameplay 框架建立的所有遊戲的基類。您需要使用 C++ 擴充套件此類,並覆蓋核心遊戲和生命週期事件方法 initializefinalizeupdaterender。您將在其中編寫程式碼以載入遊戲資源並應用遊戲邏輯和渲染程式碼。在幕後,遊戲類將接收事件並充當運行遊戲和運行遊戲迴圈並對作業系統做出反應的底層平臺層之間的抽象。

您必須實現四種方法才能開始編寫自己的遊戲

#include "gameplay.h"
using namespace gameplay;

class MyGame : public Game
{
    void initialize();
    void finalize();
    void update(float elapsedTime);
    void render(float elapsedTime);
};

initialize()

[編輯 | 編輯原始碼]

initialize() 方法在遊戲啟動時第一個幀之前由 gameplay3d 框架呼叫。您將在此處新增程式碼以載入遊戲資源並建立場景,以及任何其他一次性初始化程式碼。

finalize()

[編輯 | 編輯原始碼]

finalize() 方法在退出遊戲時由 gameplay3d 框架呼叫。您將在此處新增程式碼以清理任何未完成的資源(有關更多詳細資訊,請參閱 跨平臺遊戲程式設計與 gameplay3d/gameplay3d 設計概念#管理共享物件)。

update() 和 render()

[編輯 | 編輯原始碼]

Game::update()Game::render() 方法從每個作業系統的 gameplay::Platform 中實現的遊戲迴圈中每幀呼叫一次。這使您可以將程式碼分離到處理遊戲狀態更新和渲染遊戲視覺效果之間。您可以使用各種內建類來幫助遊戲渲染。

訪問遊戲例項

[編輯 | 編輯原始碼]

可以在遊戲程式碼中的任何位置訪問 gameplay::Game 類。它實現了一個 單例 設計模式。呼叫靜態方法 Game::getInstance() 以從任何程式碼獲取對遊戲例項的訪問許可權。

圖形和音訊裝置

[編輯 | 編輯原始碼]

遊戲啟動後,底層圖形和音訊裝置將自動初始化。這發生在呼叫 Game::initialize() 方法之前,並準備任何使用 OpenGL (ES) 2.0 或 Open AL 1.1 的類。遊戲圖形裝置將使用預設的 32 位顏色幀緩衝區、24 位深度緩衝區和 8 位模板緩衝區進行設定,以供您使用。這些是活動的圖形硬體緩衝區,您的渲染程式碼將渲染到其中。

對於更高階的使用,您可以使用 gameplay::FrameBuffer 類應用備用幀緩衝區。在 Game::render() 方法呼叫之後,幀緩衝區將被交換/呈現到物理顯示器,供使用者檢視。您可以呼叫 Game::clear() 方法以透過任何方法清除緩衝區。您也可以從程式碼(例如從 Game::initialize() 方法)呼叫 Game::renderOnce(),以回撥到僅呼叫一次然後交換/呈現到顯示器的某個方法。這對於在渲染期間的初始化期間呈現臨時更新(例如載入螢幕)非常有用。

遊戲子系統控制器

[編輯 | 編輯原始碼]

gameplay::Game 類還管理遊戲子系統控制器(例如音訊、動畫和物理控制器),並透過 getter 方法直接提供對其的訪問。這些類充當控制介面,用於管理和播放遊戲中活動的音訊和動畫,以及對物理系統中的動態進行更新。這些控制器由 gameplay::Game 類託管,並對遊戲中處理的生命週期事件做出反應。

遊戲時間和狀態

[編輯 | 編輯原始碼]

gameplay::Game 類例項啟動後,遊戲會開始執行。您可以呼叫 Game::getGameTime() 來確定遊戲運行了多長時間。您還可以呼叫 Game::getAbsoluteTime() 來確定從第一次 Game::run() 呼叫開始經過的絕對時間。這也包括任何暫停時間。您可以呼叫 Game::pause() 方法,遊戲將進入 Game::PAUSED 狀態。如果平臺上的使用者將遊戲置於後臺,遊戲時間也會暫停。如果使用者將遊戲重新置於前臺,遊戲將呼叫 Game::play(),遊戲將恢復。在遊戲的任何時候,您可以透過呼叫 Game::getState() 來確定遊戲狀態。遊戲狀態可以是 UNINITIALIZEDRUNNINGPAUSED

華夏公益教科書