當(dāng)安裝好了VS 2008和XNA GameStudio 3.0后,我們就可以開(kāi)始學(xué)習(xí)XNA了。
首先,在VS 2008中新建一個(gè)XNA GameStudio 3.0項(xiàng)目(選擇Windows Game類型),會(huì)生成一個(gè)最簡(jiǎn)單的、可運(yùn)行的游戲模板。
接下來(lái)我們將注意力轉(zhuǎn)移到我們要剖析的重點(diǎn)—— 從Microsoft.Xna.Framework.Game繼承的Game1類,其代碼如下:
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
public Game1()
{
graphics = new GraphicsDeviceManager ( this );
Content .RootDirectory = " Content " ;
}
protected override void Initialize()
{
base .Initialize();
}
protected override void LoadContent()
{
spriteBatch = new SpriteBatch (GraphicsDevice);
}
protected override void UnloadContent()
{
}
protected override void Update( GameTime gameTime)
{
if ( GamePad .GetState(PlayerIndex.One).Buttons.Back == ButtonState .Pressed)
this .Exit();
base .Update(gameTime);
}
protected override void Draw( GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
base .Draw(gameTime);
}
}
我們簡(jiǎn)單解釋一下該類中所用到的重要類型。
GraphicsDeviceManager 圖形設(shè)備管理器,用于訪問(wèn)圖形設(shè)備的通道。
GraphicsDevice 圖形設(shè)備。
Sprite 精靈,繪制在屏幕上的的 2D 或 3D 圖像,比如游戲場(chǎng)景中的一個(gè)怪獸就是一個(gè) Sprite 。
SpriteBatch 它使用同樣的方法來(lái)渲染 一組 Sprite 對(duì)象。
而Microsoft.Xna.Framework. Game 這個(gè)基類就像是一個(gè)基礎(chǔ)框架,它把整個(gè)游戲流程串聯(lián)了起來(lái),即,整個(gè)游戲會(huì)按如下流程運(yùn)轉(zhuǎn)。
該圖中的五個(gè)方法正好對(duì)應(yīng)著Game1類中的五個(gè)方法,它們的作用解釋如下。
Initialize 方法用于初始化與游戲相關(guān)的對(duì)象,比如初始化圖形設(shè)備、游戲環(huán)境設(shè)置等。
LoadContent 方法在 Initialize 方法之后調(diào)用,它用于加載游戲所需要的圖形或其它素材,比如模型、圖片、聲音等。
Update 和 Draw 方法構(gòu)成了 游戲循環(huán) 。
Update 方法用于改變和控制游戲的狀態(tài),主導(dǎo)著游戲邏輯的進(jìn)行。
Draw 方法用于在屏幕上繪制我們的場(chǎng)景、 Sprite 。要注意的是,我們應(yīng)該盡可能少的在 Draw 方法中處理游戲邏輯——它們應(yīng)該在 Update 方法中被處理。 Draw 方法僅僅負(fù)責(zé)繪制。
Update 和 Draw 方法都接受一個(gè) GameTime 類型的參數(shù), GameTime 有什么作用了?這個(gè)參數(shù)可以幫助我們依據(jù)實(shí)際的游戲時(shí)間而不是處理器的速度來(lái)決定動(dòng)畫(huà)或其它事件的發(fā)生時(shí)刻。
在這個(gè)最簡(jiǎn)單的例子中,游戲?qū)⒁阅J(rèn)的 60fps ( Frame/Second )運(yùn)行。
UnloadContent 方法在游戲結(jié)束時(shí)被調(diào)用,該方法用于卸載在 LoadContent 方法中所加載的素材和那些需你要進(jìn)行特別處理的善后事宜。
狀態(tài)輪詢與事件監(jiān)聽(tīng)
寫(xiě)過(guò) Windows 應(yīng)用程序的朋友都知道,當(dāng)用鼠標(biāo)點(diǎn)擊 Form 上的一個(gè) Button 時(shí),會(huì)觸發(fā)一個(gè) Click 事件,而我們的應(yīng)用程序通過(guò)監(jiān)聽(tīng)到事件的發(fā)生進(jìn)而來(lái)處理事件。
而在游戲開(kāi)發(fā)中,我們需要將我們的這種“事件”思維切換到“輪詢”思維。也就是說(shuō),游戲中,用戶的鼠標(biāo)、鍵盤(pán)操作并不會(huì)觸發(fā)相關(guān)的事件。如果是這樣的話,那我們?cè)撊绾沃烙脩羰欠癜聪铝耸髽?biāo)了?答案是我們需要在游戲循環(huán)中(確切的說(shuō)是在 Update 方法中)不斷地檢測(cè)輸入設(shè)備(比如鼠標(biāo))的狀態(tài)來(lái)進(jìn)行判斷。
這就是輪詢機(jī)制與事件機(jī)制的區(qū)別,也是游戲開(kāi)發(fā)和普通 windows 應(yīng)用開(kāi)發(fā)需要轉(zhuǎn)換思路的地方。
歸根到底, windows 事件機(jī)制也是對(duì)輪詢機(jī)制(即Windows消息循環(huán))的一個(gè)封裝 。
今天的介紹就到這里,下一節(jié)我們將介紹與渲染相關(guān)的基礎(chǔ)知識(shí)。
最后,附上XNA GameStudio 3.0的下載地址: http://creators.xna.com/en-us/xnags_islive
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

