正文

開發(fā)游戲引擎(5)

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


 

3. 啟動時(shí)的初始化

當(dāng)游戲首次運(yùn)行時(shí),可能需要做一系列工作:加載圖形、準(zhǔn)備一個(gè)成績排行榜表格、或者設(shè)置游戲控制按鈕。

我們將這些工作分為兩類:只在游戲首次加載時(shí)發(fā)生一次的工作,和潛在的每次游戲開始后要重復(fù)做的工作。

像準(zhǔn)備成績排行榜表格這樣的功能需要在類的構(gòu)造函數(shù)中完成,不需要重寫任何游戲引擎函數(shù)。

那些可能需要再實(shí)現(xiàn)的功能可以放置到重寫的Prepare函數(shù)中(參見程序清單4-4)。在引擎進(jìn)程的特定階段會再次調(diào)用該函數(shù);例如,當(dāng)窗體大小發(fā)生改變時(shí),會再次調(diào)用Prepare方法。因此,這就是說在該方法中要根據(jù)窗體的尺寸加載不同的圖形,并且要根據(jù)窗體尺寸設(shè)置一個(gè)游戲坐標(biāo)系。在第9章使用該引擎構(gòu)建一個(gè)游戲時(shí)我們會詳細(xì)介紹。

如果您想支持多套不同的圖形集,那么在每次修改了選定的圖形后,也可以從游戲代碼中調(diào)用Prepare函數(shù)來重新初始化這些圖形。

基類本身并不執(zhí)行任何準(zhǔn)備工作,所以可以只提供一個(gè)空的虛函數(shù),讓繼承類可以對其重寫。

程序清單4-4  Prepare 函數(shù)

/// <summary>

/// Virtual function to allow the game to prepare itself for rendering.

/// This includes loading graphics, setting coordinate systems, etc.

/// </summary>

public virtual void Prepare()

{

// Nothing to do for the base class.

}

4. 重置游戲

該函數(shù)用于準(zhǔn)備引擎狀態(tài),使一個(gè)新游戲可以開始運(yùn)行。該函數(shù)中要完成的任務(wù)包括將玩家得分重置為0并且進(jìn)行清除,或者隨機(jī)設(shè)置一個(gè)游戲難度。上一次游戲中產(chǎn)生的任何信息都要被清空,這樣才不會對啟動中的新游戲產(chǎn)生影響。

要對類的構(gòu)造函數(shù)進(jìn)行修改來使類在實(shí)例化時(shí)能夠調(diào)用Reset函數(shù)。

與Prepare函數(shù)一樣,我們也可以在基類中提供一個(gè)名為Reset的空的虛函數(shù),這樣所有從該類繼承的引擎類都能夠?qū)ζ溥M(jìn)行重寫來執(zhí)行這些任務(wù)。

5. 渲染

一旦游戲完成對自身的更新,就需要將游戲中所有需要的元素呈現(xiàn)到屏幕上。我們將調(diào)用一個(gè)名為Render的函數(shù)來執(zhí)行該工作。正如您將會看到的,與渲染類型相關(guān)的繼承類會重寫該函數(shù),然后執(zhí)行繼承引擎本身所需要的所有工作,同時(shí)讓使用此引擎的游戲盡可能的簡單。

與游戲重置一樣,在基類中實(shí)際不需要做任何工作,所以我們只用簡單地提供一個(gè)空的虛函數(shù)即可。

6. 更新游戲狀態(tài)

所有與游戲相關(guān)的游戲功能將作為一個(gè)整體(如檢測游戲是否已經(jīng)結(jié)束)在Update函數(shù)中執(zhí)行。我們的游戲會重寫該函數(shù)來執(zhí)行需要的任務(wù),但是同樣,在基類中什么也不做,所以保留該函數(shù)為空。


上一章目錄下一章

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