DrawableGameComponent XNA,实现正确的方法?

时间:2010-07-28 03:28:26

标签: c# 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中的Platformer Kit和Level类,只要它们没有实现DrawableGameComponent并决定模仿相同的功能。

2 个答案:

答案 0 :(得分:1)

这是 a 方式,这是使用DrawableGameCompenents的好方法。但这不是唯一的方式或最好的方式。对你的关卡采取这种方法没有错。如果您打算使用DrawableGameComponents,最好在更高级别使用它们(就像您在Levels中一样)然后说例如让屏幕上的每个字符和图块都成为DrawableGameComponent。

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

另外作为旁注,虽然StackOverflow是Q& A的绝佳网站,但你仍然会在XNA论坛上获得最快和最好的回复。那里的成员非常棒,而且微软XNA框架开发人员自己也会自己回答问题。

答案 1 :(得分:1)

通常,更容易避免使用DrawableGameComponent来表示“游戏玩​​法”,以便您可以更好地控制何时绘制/加载内容。

对于“等级”,这有点偏向。

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

(考虑到这一点,如果您的关卡都有不同的内容,您可能需要考虑为每个关卡提供自己的ContentManager,以便您可以在该级别的内容上使用Unload()。 )

无论如何,你将不得不做一些手动呼叫。实际上,这是实现DrawableGameComponent并将其添加到组件列表,并将级别作为游戏类的成员并自己调用其Draw()Update()函数之间的区别。没有太大的区别,但我个人会选择后者。