对于Monogame或XNA,在main函数之外有一个spawnng模式

时间:2014-07-30 19:55:55

标签: c# design-patterns xna monogame

希望我把这个问题措辞好。 寻找如何避免在主game1类中使用所有Draw()和Update()代码的想法。

我已经创建了子类,并将Update和Draw命令放入其中,但它们似乎仍然必须连接到主更新/绘图功能。

是否有创建实体的模式,让实体更多地控制它正在做的事情? 或者可能是事件/代表模式? 或类似Unity中的预制件?

我可能没有用正确的语言提出要求,或者只是错过了那些'啊哈哈'想法时刻,Monogame的新手,正在尝试使用Unity2D,并且有预制物品。我更喜欢设计Web应用程序等,游戏看起来更像是使用Main启动功能的控制台编程。

更新

只想更新我使用的内容。

我给Artemis一个很好的尝试,但我对我来说并不顺利。我建议其他人也尝试一下,你可以根据自己的喜好找到它。但是作为一名OO程序员已经很长一段时间了,使用GameComponent和DrawableGameComponent我会更加舒适和快速。就个人而言,我在更短的时间内完成了OO的成就,然后试图了解ECS。

对于产卵,现在,在我的主游戏中可能只是一个for循环来实例化我的游戏entites,然后使用components.Add(yourentity),这是我磕磕绊绊的部分。

Artemis,它很有趣,我可以看到它的吸引力。但我只是不喜欢将属性解耦到另一个类中,只是将该类作为集合添加回实体。特别是因为我使用的C#设计为更多的OO,然后是ECS。

但是尝试使用Artemis,Unity和xna GameComponents。它们都提供了构建游戏的独特方式,只需选择最适合您程序的游戏。

1 个答案:

答案 0 :(得分:3)

你所看到的是游戏控制着Update和Draw循环。为了让您的实体控制这些,您有两种选择。

第一种方法是为您的实体使用Drawble Game Component,它会自动获取游戏循环调用的绘制和更新函数。

第二种是手动执行相同的操作 - 创建所有实体的池,当主游戏获得Update或Draw调用时,它会通过该池并调用给定实体的Update和Draw函数。只要你小心处理Dispose取消它们,你也可以通过主游戏中的OnUpdate和OnDraw事件获得相同的结果。

Unity所做的更进一步 - 组件可以控制其Update和Draw调用,而不是实体,并由实体关联。这种情况越来越接近ECS框架,您应该深入研究。有关此框架的C​​#实现,请参阅: