android遊戲開發的架構
阿新 • • 發佈:2019-02-18
在編寫遊戲程式碼之前,必須要仔細地理順思路,清晰地構建出整個遊戲的框架。有的開發者經常抱怨說,遊戲開發到最後總是千頭萬緒,一旦出現bug就不知道該如何修改,身心疲憊甚至是痛不欲生。其實不然,只要搭建好了遊戲的架構,就不會再走到騎虎難下的尬境,遊戲開發就會成為一個極其享受的過程,成為一個高技術性的商業藝術創造過程。
我們將逐步地展示“是男人就堅持20秒”遊戲架構的搭建過程。在掌握策劃案的基礎上,開發者應該迅速作出判斷,細分出遊戲的功能模組。“是男人就堅持20秒”的功能模組可以如表9-3-4所示進行劃分。
成了專案流程圖之後,還不能直接進行Android遊戲程式設計,專案執行流程和遊戲執行流程是存在著較大差別的。因為專案流程圖只是從使用者體驗角度(或者策劃角度)進行的巨集觀描述,它只是起到過渡作用;而用於程式設計的流程圖則是基於程式角度給出的微觀描述,它將涉及到程式設計的實際環境。因此,我們還需要分析一下游戲實際執行的流程,而我們將要分析的這個流程就是傳說中的“狀態轉換”。是男人就堅持20秒”的遊戲狀態相對比較簡單,只有如表9-5所示的4種狀態。
當然,這個遊戲總共就只有一關,所以關卡資源載入就只能載入唯一的一關的資源。
接下來,就需要來做遊戲狀態的轉換圖了。狀態轉換一般通過有限自動機來表示,“是男人就堅持20秒”的狀態轉換比較簡單,下面給出一種狀態轉換的參考圖,如圖9-3-5所示:
完成了前面幾步的準備工作,框架基本上就已經出來了。雖然“是男人就堅持20秒”的架構比較簡單,但是通用性和擴充套件性都比較強,下面的這段虛擬碼給出了一種高效的遊戲框架,以供參考:While(遊戲未結束)
{
State_change();//狀態轉換
Update_fps(); //狀態執行
Draw();//繪製
}
• State_change()函式完成遊戲狀態間的轉換,可以根據圖9-3狀態轉換圖實現,不再贅述。
• Update_fps()函式框架的虛擬碼如下:
Update_fps()
{
Switch(遊戲狀態)
Case 資源載入:
Case 進入關卡:
Load_gate();//載入背景、飛機、炮彈的圖片。
ase 遊戲選單:
If (遊戲結束) 計算遊戲結果
ase 遊戲進行:
New_paodan();//產生新炮彈
Move();//計算出該時刻飛機以及所有炮彈所在的位置
Is_pengzhuang(); //碰撞判斷
ase 遊戲暫停:
Thread_pause();//遊戲暫停操作。
• Draw()函式框架的虛擬碼如下:
Draw()
{
Switch(遊戲狀態)
Case 遊戲進行:
Draw_background();//繪製背景
Draw_paodan();//畫炮彈
Draw_feiji();//畫飛機
Case 其他:
略....
}
注意:
• 上述的draw()函式參考框架並不是適用於所有遊戲的。特別是使用了3d特效,或者需要實現圖層
管理器的遊戲。draw()函式應該根據實際需要量身定製。
• 上述的draw()函式參考框架並不能保證繪圖效能最優,高效能的影象繪製框架將非常複雜。
完成了遊戲架構之後,不要忘記把思考的結晶凝結為文件資料。建議完成如下文件:
• 專案開發時程表
• 功能模組劃分及介面表
• 技術備案表
這三個表將幫助遊戲開發人員明晰責權、監管制作,併為資料統計提供便利。
我們將逐步地展示“是男人就堅持20秒”遊戲架構的搭建過程。在掌握策劃案的基礎上,開發者應該迅速作出判斷,細分出遊戲的功能模組。“是男人就堅持20秒”的功能模組可以如表9-3-4所示進行劃分。
▲表9-3-4功能模組
成了專案流程圖之後,還不能直接進行Android遊戲程式設計,專案執行流程和遊戲執行流程是存在著較大差別的。因為專案流程圖只是從使用者體驗角度(或者策劃角度)進行的巨集觀描述,它只是起到過渡作用;而用於程式設計的流程圖則是基於程式角度給出的微觀描述,它將涉及到程式設計的實際環境。因此,我們還需要分析一下游戲實際執行的流程,而我們將要分析的這個流程就是傳說中的“狀態轉換”。是男人就堅持20秒”的遊戲狀態相對比較簡單,只有如表9-5所示的4種狀態。
▲9-3-5遊戲的4種狀態
當然,這個遊戲總共就只有一關,所以關卡資源載入就只能載入唯一的一關的資源。
接下來,就需要來做遊戲狀態的轉換圖了。狀態轉換一般通過有限自動機來表示,“是男人就堅持20秒”的狀態轉換比較簡單,下面給出一種狀態轉換的參考圖,如圖9-3-5所示:
▲9-3-5遊戲執行階段細化流程圖
完成了前面幾步的準備工作,框架基本上就已經出來了。雖然“是男人就堅持20秒”的架構比較簡單,但是通用性和擴充套件性都比較強,下面的這段虛擬碼給出了一種高效的遊戲框架,以供參考:While(遊戲未結束)
{
State_change();//狀態轉換
Update_fps();
Draw();//繪製
}
• State_change()函式完成遊戲狀態間的轉換,可以根據圖9-3狀態轉換圖實現,不再贅述。
• Update_fps()函式框架的虛擬碼如下:
Update_fps()
{
Switch(遊戲狀態)
Case 資源載入:
Case 進入關卡:
Load_gate();//載入背景、飛機、炮彈的圖片。
ase 遊戲選單:
If (遊戲結束) 計算遊戲結果
ase 遊戲進行:
New_paodan();//產生新炮彈
Move();//計算出該時刻飛機以及所有炮彈所在的位置
Is_pengzhuang();
ase 遊戲暫停:
Thread_pause();//遊戲暫停操作。
• Draw()函式框架的虛擬碼如下:
Draw()
{
Switch(遊戲狀態)
Case 遊戲進行:
Draw_background();//繪製背景
Draw_paodan();//畫炮彈
Draw_feiji();//畫飛機
Case 其他:
略....
}
注意:
• 上述的draw()函式參考框架並不是適用於所有遊戲的。特別是使用了3d特效,或者需要實現圖層
管理器的遊戲。draw()函式應該根據實際需要量身定製。
• 上述的draw()函式參考框架並不能保證繪圖效能最優,高效能的影象繪製框架將非常複雜。
完成了遊戲架構之後,不要忘記把思考的結晶凝結為文件資料。建議完成如下文件:
• 專案開發時程表
• 功能模組劃分及介面表
• 技術備案表
這三個表將幫助遊戲開發人員明晰責權、監管制作,併為資料統計提供便利。