DrawableGameComponent是否是创建按钮的错误工具?

时间:2012-02-23 21:05:09

标签: c# windows-phone-7 xna

我正在制作基于Game State Managment模式的游戏。我在第二页上制作了20个按钮,让用户选择关卡。

 LevelButton : TexturedDrawableGameComponent

创建内部LoadContent()按钮并将其添加到GameComponent集合中。如果我说得对,GameCompoenent是一种全局集合,所以当用户从第4页回到第2页时,会添加另外20个按钮。

我添加了一个清除集合中所有LevelButton的循环,但似乎这是错误的。

DrawableGameComponent是否是创建按钮的错误工具?

2 个答案:

答案 0 :(得分:3)

Yes

DrawableGameComponent及其朋友是XNA框架的可选位。考虑一下他们的助手。简单的示例实现。

如果您需要更多或不同的功能,则必须使用自己的实现替换它们!

在这种情况下,您似乎想要的是“按钮”对象(例如LevelButton),可能使用UpdateDraw等方法。

然后你需要某种“按钮容器”对象来保存所有这些按钮,并在它们在屏幕上时保持它们的绘制和更新。但是当他们离屏时,不要对他们做任何事情。

(您可以创建自己的GameComponentCollection实例来管理它,并继续使用游戏组件。但您仍然必须提供自己的绘制/更新/加载/卸载/初始化逻辑。{{{{1}的逻辑1}}是Game.Components的内部而不是可重用的。我建议只使用Game - 保持简单!)

创建多个集合的替代方法 - 即从全局集合中添加和删除(或禁用/启用)组件 - 非常难看并且容易出错。不要这样做。

答案 1 :(得分:-1)

我认为如果它运行没有错。

也许你可以通过几种更优雅的方式来解决这个问题,或者改进你的方式......但问题是它必须运行。

也许您在点击它时试图删除该按钮,这会给您带来问题,因为该按钮正在更新。

当关卡选择屏幕变为非活动状态或被毁坏时,是删除按钮的时间。

当然,您可以创建一个按钮集合类来管理按钮列表,然后您只能启用/禁用或删除一个DrawableGameComponent,并且可以在其他屏幕中使用。