這個部分在昨天的講座中剛好有提到,今天看到在XNA官方網站上面提供了這部分的說明。

 

要進行XNA遊戲開發之前,請各位務必要先了解到XNA的Game Loop唷!!!

網址: http://creators.xna.com/en-US/article/introtogameloop

在這個文章中會先簡單地跟各位介紹為什麼XNA會要提供一個Game Loop?

原因是Game loop的設計概念,通常是一個很複雜的問題,對於剛開始對遊戲設計有興趣的使用者來說

這根本就是個不可能的任務,所以XNA才提供一個是用於各種遊戲類型的Game Loop。

 

然後會說明一個遊戲的生命週期:

初始化和載入資源 -> 遊戲迴圈(Loop) -> 釋放和結束遊戲

 

接下來會介紹到Game Loop的核心類別 - Game class

這個類別提供很多屬性和一些虛擬的函數,這些函數就是對應到遊戲的生命週期的部分

初始化和載入資源所對應到的方法有:

建構子、initizalize和LoadContent三個函數

遊戲迴圈對應到:

Update和Draw的兩個函數

最後釋放資源也就是unloadContent

 

下圖是XNA的運作流程圖,這些函數名稱都是被定義在Game的類別中

XNA Game Loop

在initialize的方法部分,是在遊戲一開始的時候就會呼叫執行,在這個函數中會去設定遊戲核心相關的參數(像是遊戲解析度那些內容)。

完成設定以後會再呼叫LoadContent的方法,在這個方法中會載入所有遊戲上面會使用到的遊戲資源(像是3D模型、2D圖片和音樂音效等等)。

 

而在Update和Draw這兩個函數則是被XNA的Framework不停地重複呼叫。

在update中主要是做些邏輯計算或執行下列事項:

1. 收集輸入資訊: 像是看看使用者有沒有按下鍵盤、GamePad或是在WP7上面的手勢偵測和多點觸控等等檢查。

2. 更新或計算依些關於AI或是碰撞偵測等等。

3. 更新一些動畫資訊,像是這一個frame是要畫出0.01秒的動作,不過這邊的更新只是更新相關的動畫矩陣,而不會把模型畫出來。

4. 更新攝影機的部分。

 

Draw則是將可以看到的東西給畫出來。而Unload Content只會在遊戲結束時被呼叫,用來釋放遊戲資源。

通常會見是設計師會把跟圖形無關的操作在Update上執行,而跟繪圖有關的則是在draw的函數執行。

 

Game Loop的部分大概到這邊

文章中還有說明其他的內容,有興趣的可以自行在看唷XD

創作者介紹

StreamWhite

teexit1224 發表在 痞客邦 PIXNET 留言(0) 人氣()