您好,登錄后才能下訂單哦!
在之前的關于XNA的介紹中,我們主要講解了XNA的一些基礎,但是將我們在實現一些簡單游戲時,眾多對象的處理則是一個比較讓人頭痛的問題。
在這里,我們使用裝飾模式來解決在現有對象基礎上的擴展問題。
整個程序包括以下幾個類文件:
Program XNA入口程序
Game1 完成基礎數據加載、卸載,游戲進行時數據的更新、圖型的繪制。
GameEngine 用來定義要擴展對象的職責,可以理解為一個裝飾的標準。
Game 用來維護一個指向GameEngine的引用,可以理解為一個做裝飾的工具。
Map 一個最基本的地圖,也就是說我們要在這個地圖上進行裝飾。
Spirit 我方的飛機,繼承自Game類,將來需要裝載到Map上。
Bullet 我方×××,同上。
Enemy 敵方飛機,同上。
EnemyBullet 敵方×××,同上。
以下為各類之間的關系圖:
需要注意的是,我們在Game的構造方法中,需要定義GameEngine的參數,以便于將來在裝飾疊加時傳值:
private GameEngine ge;
public Game(GameEngine ge)
{
this.ge = ge;
}
//示列方法,在該方法中需要調用引用對象中的同方法。
public override void Update(KeyboardState input)
{
ge.Update(input);
}
//.......
那么,在繼承Game這個裝飾對象的類中,也需要去訪問父類,也就是Game類的方法,以便得到對應的參數對象,和執行父類的方法:
class Spirit:Game //繼承父類
{
public Spirit(GameEngine ge)
: base(ge)
{
}
public override void LoadContent(ContentManager content)
{
base.LoadContent(content);
}
}
最后,在Game1中,就可以調用并完成最后的裝飾工作:
Game game; public Game1() { GameEngine ge = new Map(); //基本的地圖 game = new Spirit(ge); //我方飛機加載到地圖上 game = new Bullet(game); //我方×××加載到地圖上 game = new EnemyBullet(game); //敵方×××加載到地圖上 game = new Enemy(game); //敵方飛機加載到地圖上 } |
完成的效果圖如下:
XNA游戲開發是業余愛好,不清楚在正真的XNA游戲開發種是如何來解決這種問題的。未來WP7中游戲的開發主要以XNA為主,大家可以研究一下,以下是提供的代碼下載:
下載地址
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。