正文

開(kāi)發(fā)游戲引擎(3)

Windows移動(dòng)游戲開(kāi)發(fā)實(shí)戰(zhàn) 作者:(美)Adam Dawes


 

4.2  引擎的實(shí)現(xiàn)

我們現(xiàn)在開(kāi)始對(duì)這些類進(jìn)行開(kāi)發(fā),首先要編寫(xiě)的是CGameEngineBase類。在現(xiàn)在的階段,不必?fù)?dān)心這些類是否具有意義。在本章的后文中將使用該引擎創(chuàng)建一些示例。以后我們有機(jī)會(huì)利用該引擎創(chuàng)建復(fù)雜的操作,所以在示例游戲中所用的代碼盡量簡(jiǎn)單。

4.2.1  CgameEngineBase類

下面對(duì)CGameEngineBase類的大概情況進(jìn)行介紹:

● 目標(biāo)  游戲引擎的核心;為管理游戲及其中的對(duì)象提供函數(shù)。

● 類型  抽象基類。

● 父類  非繼承類。

● 子類  特定圖形API的游戲?qū)崿F(xiàn),例如GDI引擎。

● 主要功能

● Prepare  為引擎初始化數(shù)據(jù)。

● Reset  為一個(gè)新游戲初始化數(shù)據(jù)。

● Advance  步進(jìn)游戲中的所有元素。

● Update  更新游戲狀態(tài)。

● Render  繪制游戲。

該類被創(chuàng)建為抽象類;我們不會(huì)為該類創(chuàng)建實(shí)際的實(shí)例,因?yàn)樗鼪](méi)有包含足夠的功能來(lái)支持我們的游戲開(kāi)發(fā)。但是,它將成為一個(gè)創(chuàng)建GDI游戲類與OpenGL游戲類的構(gòu)建塊(實(shí)際上將來(lái)還可以應(yīng)用于其他渲染技術(shù))。

因此我們會(huì)提供一套核心函數(shù)集,所有從它繼承的游戲引擎都要實(shí)現(xiàn)這些功能。并且提供一套虛函數(shù)集,使得各種繼承類能對(duì)這些虛函數(shù)用自己的方式進(jìn)行重寫(xiě)以執(zhí)行特定任務(wù)。

所有繼承而來(lái)的引擎類有一些東西是通用的,即要對(duì)游戲運(yùn)行窗體進(jìn)行訪問(wèn)??赡苄枰獧z測(cè)窗體的尺寸來(lái)判斷游戲元素是否即將跑到邊界上,或者要訪問(wèn)窗體中的控件是否位于窗體內(nèi)。

為了保證總有一個(gè)窗體可用,我們?yōu)樵擃悇?chuàng)建帶有參數(shù)的構(gòu)造函數(shù),將所需要的窗體信息傳遞進(jìn)去。該類一開(kāi)始非常簡(jiǎn)單,如程序清單4-1所示。

程序清單4-1  最初的CGameEngineBase類

namespace GameEngineCh4

{

public abstract class CGameEngineBase

{

/// <summary>

/// Store a reference to the form against which this GameEngine 

/// instance is running

/// </summary>

private Form _gameForm;

/// <summary>

/// Class constructor -- require an instance of the form that we will 

/// be running

/// within to be provided.

/// </summary>

/// <param name="gameForm"></param>

public CGameEngineBase(Form gameForm)

{

// Store a reference to the form

_gameForm = gameForm;

}

}

}


上一章目錄下一章

Copyright ? 讀書(shū)網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)