DrawableGameComponent XNA,实现正确吗?

问题描述:

所以我一直在谷歌搜索/ 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并决定模仿相同的功能。

这就是a的方式,这是使用DrawableGameCompenents的好方法。但它不是唯一的方式或最好的方式。采取这种方法对你的关卡没有任何不妥。如果你打算使用DrawableGameComponents,那么最好在更高的层次上使用它们(比如你可以用于Levels),然后例如说让你的屏幕上的每个角色和瓦片都是一个DrawableGameComponent。

我个人从来没有使用过它们,就像Platformer Kit一样,我更喜欢创建自己的类并模仿DrawableGameComponent的功能。但是一种方式不一定比另一种更好。

另外,作为一个附注,虽然*是Q & A的绝佳网站,但您仍然可以在XNA论坛上获得最快最好的回复。那里的成员非常棒,通常微软的XNA框架开发人员自己也跳过来回答问题。

对于“游戏玩法”,避免使用DrawableGameComponent通常更容易,这样您可以更好地控制事物绘制/加载的时间。

对于“水平”,这是多一点边缘。

想到的第一个问题是 DrawableGameComponent.LoadContent()只能从 Game.LoadContent()调用。所以你不得不在调出水平时手动调用它(同样适用于 UnloadContent())。 [编辑:实际上,初始化顺序略有不同,我认为 - 你必须检查一下自己。]

(想想看,如果你的关卡都有单独的内容,你可能要考虑给予它的每一个自己的ContentManager,这样就可以只在这个级别的内容使用Unload()。)

你将不得不反正做一些手工调用。所以真的这是执行DrawableGameComponent并将其添加到组件列表中,并具有作为游戏类成员的级别并自己调用其Draw()Update()函数之间的差异。没有太大的区别,但是我个人会选择后者。