【发布时间】:2011-11-29 04:56:10
【问题描述】:
我一直在考虑尝试基于组件的架构来进行游戏开发。我已经阅读了一些关于它的博客文章和文章,但我还有一些事情还没有整理出来。当我说基于组件时,我的意思是您可以将组件添加到 ComponentManager 以更新其列表中的所有组件。我想尝试这样做以避免获得继承它们不需要的变量和函数的类。我真的很喜欢拥有一个非常简单的实体类的想法,其中有很多组件并排工作而不会变得臃肿。此外,它很容易在运行时删除和添加功能,这真的很酷。
这就是我的目标。
// this is what the setup could be like
entity.componentManager.add(new RigidBody(3.0, 12.0));
entity.componentManager.add(new CrazyMagneticForce(3.0));
entity.componentManager.add(new DrunkAffection(42.0, 3.0));
// the game loop updates the component manager which updates all components
entity.componentManager.update(deltaTime);
通信:部分组件需要与其他组件通信
我不能依靠组件来自我维持。有时他们需要与其他组件进行通信。我该如何解决这个问题?在 Unity 3D 中,您可以使用 GetComponent() 访问组件。
我想这样做,但是如果你有两个相同类型的组件会发生什么?也许你会得到一个向量。
var someComponent : RigidBody = _componentManager.getComponent(RigidBody);
优先级:某些组件需要先于其他组件更新
某些组件需要先于其他组件更新才能获得当前游戏循环的正确数据。我正在考虑为每个组件添加一个优先级,但我不确定这是否足够。 Unity 使用 LateUpdate 和 Update,但也许有一种方法可以更好地控制执行顺序。
嗯,就是这样。如果您有任何想法,请随时发表评论。或者,如果你有任何关于这方面的好文章或博客,我很乐意看看它们。谢谢。
Component based game engine design
http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/
编辑: 我的问题实际上是如何解决组件之间的优先级和通信问题。
【问题讨论】:
-
好的——但是你的问题是什么?
-
我想就组件之间的通信和优先级问题获得意见。我将编辑问题以澄清。谢谢
标签: actionscript-3 architecture components