目前,我們已經(jīng)介紹了許多技術基礎,相信您已經(jīng)對如何將內容顯示到屏幕上的相關函數(shù)有了較好的掌握?,F(xiàn)在是將學到的這些知識組織起來的時候了。
其實,現(xiàn)在直接開發(fā)一個游戲也并非難事,但我們并不急著這么做,而是采用一個更加有計劃的方法。
在本章中,我們將開始創(chuàng)建一個游戲引擎,這是一個能夠承載我們的游戲的框架。在開發(fā)每一個游戲時,它都能將代碼簡化,加快開發(fā)速度,使我們能將重點放到游戲本身而不是糾纏于那些無聊的技術細節(jié)上。我們可以在引擎中將這些問題一次性解決,那么在開發(fā)時就不必心有疑慮。
這個游戲引擎能夠為我們解決很多其他復雜的問題:設備功能的兼容性、圖形優(yōu)化、對象管理以及與操作系統(tǒng)之間的交互等。
本書后面的各個章節(jié)還會對它繼續(xù)進行開發(fā)和使用。一旦完成引擎開發(fā),將創(chuàng)建一個能復用的DLL類庫,您可以將它用于自己的游戲,來獲得思路和靈感;或者根據(jù)自己的需要進行自定義。
注意:
我們將一直對該游戲引擎進行開發(fā),直到本書結束。如果您想先創(chuàng)建自己的游戲項目,那么應當使用最終版本的游戲引擎代碼,但其中可能會包含一些我們現(xiàn)在沒有講到的功能。最終版本的游戲引擎位于本書配套源代碼的GameEngine目錄中,為了不造成混亂,開發(fā)過程中所生成的每個版本在其項目及DLL名稱中都包含其所在章節(jié)的名稱。
4.1 設計游戲引擎
在設計引擎時,我們將利用.NET的面向對象特性。引擎本身會提供一個抽象類,該類支持一套能通用于任何游戲的核心函數(shù)集。然后在從該引擎繼承出另一個游戲引擎類,并且將該繼承類設置為支持使用GDI創(chuàng)建游戲。然后在本書的第10章中,我們將派生出另外一個類用于OpenGL ES游戲,這樣允許我們在討論和開發(fā)過程中將功能和方法進行清晰的劃分。
除了引擎類,我們還將定義另一個抽象類,該類提供對游戲對象的支持。這些對象用于游戲中所有需要進行渲染的元素(例如,在俄羅斯方塊中下落的方塊;Pac Man游戲中的妖怪、豆子和小精靈;太空侵略者中所有的飛船和子彈)。對象可以知道與游戲元素相關的各種信息(如,它們在屏幕中的位置),并且允許我們使用統(tǒng)一而簡單的方法來有效地處理移動和渲染。與引擎一樣,該類也會有一個繼承類,用于支持GDI對象。
圖4-1展示了這幾個類以及它們之間的關系。