babu61509 散播福音的祭司
註冊時間: 2007-08-26 文章: 142
681.01 果凍幣
|
發表於: 2011-8-8, PM 11:04 星期一 文章主題: [C++] DxGameComponent 1.0a [2011/08/13] |
|
|
2011/08/09 囧,修正某些地方因為改class沒處理好編譯有問題的地方
2011/08/13 1.0b 使用#ifndef判斷是否重新讀入,新增Run()方便使用
為了之前 這篇 所說的雜亂理由寫出來的基礎遊戲組件Class。
.h內容:
代碼: |
#ifndef _SECTION_DXGAMECOMPONENT_ // 避免重複include
#define _SECTION_DXGAMECOMPONENT_
/*
DxGameComponent 1.0b
*/
#include "allPart.h"
class DxGameComponent{
protected:
LPDIRECT3DDEVICE9 m_pD3DDevice; // D3D裝置
LPD3DXSPRITE m_pSprite; // Sprite
DWORD U_LastTime; // 上次 Update 的時間
DWORD D_LastTime; // 上次 Draw 的時間
public:
DxGameComponent(LPDIRECT3DDEVICE9 D3DDevice, LPD3DXSPRITE D3DXSprite);
~DxGameComponent();
virtual void Update(); // 呼叫 資訊更新及邏輯控制
virtual void Draw(); // 呼叫 繪圖
virtual void Run(); // 執行 更新+繪圖
virtual void Init(); // 請多載此 初始用函式
virtual void OnUpdate(DWORD ElapseTime); // 請多載此 更新函式
virtual void OnDraw(DWORD ElapseTime); // 請多載此 繪圖函式
};
#endif
|
遊戲的流程簡單說就是:
事件發生後對物件更新及處理 -> 畫出來 -> 事件發生後對物件更新及處理 -> 畫出來 ->..... (直到遊戲結束)
事件的發生有可能是時間到了,或是有輸入之類的觸發。但是依照這樣的流程寫起來就會很雜亂,所以這邊簡單的用狀態機作法來寫遊戲架構。
首先,先把遊戲可能的狀態列出來,比如初始化、開頭標題、主選單等等。
代碼: |
enum GameState{
Game_Init, // 初始化
Game_OpeningTitle, // 開頭標題
Game_MainMenu, // 主選單
Game_GamePlay, // 遊玩
Game_Exit // 離開
};
|
一般遊戲狀態大多可以分成這樣,當然也可以更細分下去。每個組件繼承自基礎的遊戲組件,再把各自的功能寫進去,這樣分門別類的寫,架構上就會比較明確、容易了解跟除錯方便。判斷現在的流程是在哪個狀態,再依狀態呼叫組件的 Update 跟 Draw ,一層一層的呼叫下去。
當然也可以用別種架構來寫,這裡只是提供一種思路,只要讀者覺得用起來方便就可以了。
描述: |
|
![](images/icon_clip.gif) 下載 |
檔名: |
DxGameComponent.rar |
附件大小: |
2.19 KB |
下載次數: |
共 394 次 |
_________________ 已經畢業了!! |
|