2010-07-28 75 views
1

所以我一直在谷歌搜索/ binging試圖找到一個答案,但制定空白。如果我想有不同的資產遊戲的每個級別一個級別類型做我做這樣的事情DrawableGameComponent XNA,實現正確嗎?

public class Level:DrawableGameComponent 
{ 
} 



//somewhere inside functions or w.e 
    var Level = new Level(this,"Level1"); 
    Components.Add(Level)); 
//Player wins Level 
    Components.Remove(Level)); 
    Level = new Level(this,"Level2"); 
    Components.Add(Level); 

這是它是如何做的,我看了一些成熟的工具包,在XNA 3.1和水平類提供他們沒有實現DrawableGameComponent並決定模仿相同的功能。

回答

1

這就是a的方式,這是使用DrawableGameCompenents的好方法。但它不是唯一的方式或最好的方式。採取這種方法對你的關卡沒有任何不妥。如果你打算使用DrawableGameComponents,那麼最好在更高的層次上使用它們(比如你可以用於Levels),然後例如說讓你的屏幕上的每個角色和瓦片都是一個DrawableGameComponent。

我個人從來沒有使用過它們,就像Platformer Kit一樣,我更喜歡創建自己的類並模仿DrawableGameComponent的功能。但是一種方式不一定比另一種更好。

另外,作爲一個附註,雖然StackOverflow是Q & A的絕佳網站,但您仍然可以在XNA論壇上獲得最快最好的回覆。那裏的成員非常棒,通常微軟的XNA框架開發人員自己也跳過來回答問題。

1

對於「遊戲玩法」,避免使用DrawableGameComponent通常更容易,這樣您可以更好地控制事物繪製/加載的時間。

對於「水平」,這是多一點邊緣。

想到的第一個問題是 DrawableGameComponent.LoadContent()只能從 Game.LoadContent()調用。所以你不得不在調出水平時手動調用它(同樣適用於 UnloadContent())。 [編輯:實際上,初始化順序略有不同,我認爲 - 你必須檢查一下自己。]

(想想看,如果你的關卡都有單獨的內容,你可能要考慮給予它的每一個自己的ContentManager,這樣就可以只在這個級別的內容使用Unload()。)

你將不得不反正做一些手工調用。所以真的這是執行DrawableGameComponent並將其添加到組件列表中,並具有作爲遊戲類成員的級別並自己調用其Draw()Update()函數之間的差異。沒有太大的區別,但是我個人會選擇後者。