actionscript-3 - 游戏开发中的基于组件的架构

标签 actionscript-3 architecture components

我一直在考虑为游戏开发尝试基于组件的架构。我已经阅读了一些关于它的博客文章和文章,但我还有一些事情还没有解决。当我说基于组件时,我的意思是您可以将组件添加到 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() 访问组件。 .

我想这样做,但是如果您有两个相同类型的组件会发生什么?也许你会得到一个 Vector 回来。
var someComponent : RigidBody = _componentManager.getComponent(RigidBody);

优先级:某些组件需要先于其他组件更新

某些组件需要先于其他组件更新才能获得当前游戏循环的正确数据。我正在考虑为每个组件添加一个优先级,但我不确定这是否足够。 Unity 使用 LateUpdate 和 Update 但也许有一种方法可以更好地控制执行顺序。

嗯,就是这样。如果您有任何想法,请随时发表评论。或者,如果您有任何关于此的好文章或博客,我很乐意查看它们。谢谢。

Component based game engine design

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

编辑:
我的问题实际上是如何通过组件之间的优先级和通信来解决问题。

最佳答案

我选择了 RDMBS 组件实体系统 http://entity-systems.wikidot.com/rdbms-with-code-in-systems#objc

到目前为止,它运行得非常好。每个组件只保存数据,没有方法。然后我有子系统来处理组件并执行实际工作。有时一个子系统需要与另一个子系统通信,为此我使用服务定位器模式 http://gameprogrammingpatterns.com/service-locator.html

至于优先事项。每个系统都在我的主游戏循环中进行处理,所以这只是先处理哪个系统的问题。所以对我来说,我处理控制,然后是物理,然后是相机,最后是渲染。

关于actionscript-3 - 游戏开发中的基于组件的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7623169/

相关文章:

actionscript-3 - Flash AS3 - SoundChannel 错误 #1009

actionscript-3 - 在AS3 TextField中使用嵌入式字体时,可以使用非嵌入式后备字体吗?

web-services - SOA - 服务应该有多精细才能保持性能?

c - C 中整数或任何其他数据类型的大小是否取决于底层架构?

architecture - CQRS/事件溯源架构的最佳实践/存储选择

actionscript-3 - 在循环中创建具有不同参数的匿名函数

actionscript-3 - 如何在as3中使用parsley框架注入(inject)字典?

jquery - 禁用使用安全组件和 jQuery 的 CakePHP 表单中的输入元素

javascript - AngularJS 1.6 + ES6 - $doCheck 被调用两次

javascript - 如何在js文件中加载vue组件