我正在制作基于Game State Managment模式的游戏。我在第二页上制作了20个按钮,让用户选择关卡。
LevelButton : TexturedDrawableGameComponent
创建内部LoadContent()按钮并将其添加到GameComponent集合中。如果我说得对,GameCompoenent是一种全局集合,所以当用户从第4页回到第2页时,会添加另外20个按钮。
我添加了一个清除集合中所有LevelButton的循环,但似乎这是错误的。
DrawableGameComponent是否是创建按钮的错误工具?
答案 0 :(得分:3)
DrawableGameComponent
及其朋友是XNA框架的可选位。考虑一下他们的助手。简单的示例实现。
如果您需要更多或不同的功能,则必须使用自己的实现替换它们!
在这种情况下,您似乎想要的是“按钮”对象(例如LevelButton
),可能使用Update
和Draw
等方法。
然后你需要某种“按钮容器”对象来保存所有这些按钮,并在它们在屏幕上时保持它们的绘制和更新。但是当他们离屏时,不要对他们做任何事情。
(您可以创建自己的GameComponentCollection
实例来管理它,并继续使用游戏组件。但您仍然必须提供自己的绘制/更新/加载/卸载/初始化逻辑。{{{{1}的逻辑1}}是Game.Components
的内部而不是可重用的。我建议只使用Game
- 保持简单!)
创建多个集合的替代方法 - 即从全局集合中添加和删除(或禁用/启用)组件 - 非常难看并且容易出错。不要这样做。
答案 1 :(得分:-1)
我认为如果它运行没有错。
也许你可以通过几种更优雅的方式来解决这个问题,或者改进你的方式......但问题是它必须运行。
也许您在点击它时试图删除该按钮,这会给您带来问题,因为该按钮正在更新。
当关卡选择屏幕变为非活动状态或被毁坏时,是删除按钮的时间。
当然,您可以创建一个按钮集合类来管理按钮列表,然后您只能启用/禁用或删除一个DrawableGameComponent,并且可以在其他屏幕中使用。