日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

正文

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

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


 

2. 推進游戲

我們還要對Advance方法進行重寫。在該方法中,要檢測游戲中的每個對象來查看其位置是否發(fā)生了移動或是發(fā)生了其他狀況,從而需要對對象進行重繪。其原因也將在第4.4節(jié)中進行介紹。

4.2.5  CGameFunctions類

下面對CGameFunctions類進行介紹:

● 目的  為游戲引擎項目提供實用函數(shù)。

● 類型  包含了靜態(tài)成員的內部類。

● 父類  沒有父類。

● 子類  沒有繼承的子類。

● 主要功能

● IsSmartphone  標識設備是觸摸屏設備還是smart phone設備。

● CombineRectangles  幫助我們操縱矩形區(qū)域。

游戲引擎所包含的最后一個類是CGameFunctions,它為引擎提供了不同的工具函數(shù)。該類為內部類,所以在引擎程序集之外看不到它。該類的構造函數(shù)為私有的,所以無法創(chuàng)建其實例:該類中所有的函數(shù)都是statics的,所以不需要創(chuàng)建對象實例就可以調用它。

我們將在該類中構建一些額外的功能,以在后面章節(jié)中增強引擎。但是現(xiàn)在只實現(xiàn)兩個函數(shù):

● IsSmartphone  就像第2章中所介紹的那樣,該函數(shù)用于判斷設備是一個觸摸屏設備還是一個smart phone設備。

● CombineRectangles  此函數(shù)以兩個Rectangle對象作為參數(shù),并返回一個恰好能容納下這兩個矩形的Rectangle。它實際上是對Rectangle.Union方法進行了包裝,但它將空矩形(將Top、Left、Width及Height全部設置為0)作為特例,并將其排除在外。

這樣,游戲引擎的雛形就完成了——還好,這不太費力。接下來,我們將簡單地將引擎應用到一個游戲中。

4.3  使用游戲引擎

我們在一個單獨的項目中來構建游戲,通過對游戲引擎項目或對其DLL進行引用來訪問游戲引擎類。

游戲項目中將包含一個game類,它繼承于CGameEngineGDIBase類,我們將控制游戲本身整體流程的代碼放到該類中。

我們還將添加一些Object類,用于代表游戲中的對象(分別是星球、導彈、外星人等)。game類可以將這些類的實例添加到游戲中。

最后要在一個.NET CF窗體中實現(xiàn)游戲,在該窗體中需要一點代碼,其中大部分是相似的,并且很簡單:

● 在窗體的構造函數(shù)中,對已經定義在游戲項目中的game類進行實例化,將窗體本身作為一個參數(shù)進行引用。

● 對OnPaintBackgroud方法進行重寫,正如前面所討論的。

● 為Paint事件添加處理程序,在其中調用game類的Present方法,用于將后臺緩沖區(qū)顯示在屏幕上。

● 創(chuàng)建一個游戲循環(huán),來重復更新游戲。在循環(huán)中將調用game類的Advance函數(shù)。

稍后我們將對該循環(huán)進行詳解。

目前來看,外部程序調用引擎本身看起來還是非常簡單的!

創(chuàng)建彈球示例游戲

接下來,我們用游戲引擎來構建一個示例項目。我們將創(chuàng)建一個小球,小球能在游戲的窗口中到處反彈。與上一章中創(chuàng)建的移動方塊比較相像,但這里將模擬重力,所以小球在降落到窗口的底部的過程中會加速。

Bounce項目是一個單獨的程序集,項目中添加了對GameEngineCh4的引用(本章中所構建的游戲引擎版本)。在提供的項目中已經添加了該引用。也可以在Solution Explorer窗口中,右擊游戲項目中的References節(jié)點,然后選擇Add Reference選項(在VB.NET中,雙擊My Project節(jié)點,選擇References選項卡,然后單擊Add按鈕)自行添加引用。如果游戲引擎項目包含在同一個解決方案中,那么單擊Projects選項卡在其中選擇游戲引擎項目;否則,就在Browse選項卡中定位編譯后的DLL。這樣就可以在游戲項目中使用該游戲引擎了。

Bounce項目包含了一個用于顯示游戲輸出的窗體,以及兩個用于運行游戲的類(一個從GameEngineCh4.CGameEngineGDIBase繼承,另一個從CGameObjectGDIBase繼承)。在本書配套下載代碼的4_1_Bounce目錄中可以找到該項目。

1. CbounceGame類

首先要創(chuàng)建游戲引擎。這將在CbounceGame類中實現(xiàn),該類從游戲引擎的CgameEngine-

GDIBase類中繼承。除了其構造函數(shù)之外,它只有兩個函數(shù),即Prepare函數(shù)和Reset函數(shù)的重寫。程序清單4-8展示了Prepare函數(shù)中的代碼。

程序清單4-8  Bounce 游戲的Prepare函數(shù)

/// <summary>

/// Prepare the game

/// </summary>

public override void Prepare()

{

Assembly asm;

// Allow the base class to do its work

base.Prepare();

// Initialise graphics library

if (GameGraphics.Count == 0)

{

asm = Assembly.GetExecutingAssembly();

GameGraphics.Add("Ball",

new Bitmap(asm.GetManifestResourceStream("Bounce.Graphics.Ball. png")));

}

}


上一章目錄下一章

Copyright ? 讀書網 rgspecialties.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號