3

实体组件系统能够解决游戏开发中OO编程中可能出现的规模问题。我对 ECS 有几个疑问:

概述:有些实体包括一些组件(具有数据)和具有诸如行走逻辑、战斗逻辑等逻辑的系统。因此,在任何游戏中,敌人是实体,英雄是具有自己系统的实体等。每个玩家/敌人都成为一个实体。

  1. 最初我使用舞台、组和演员,其中舞台使用层次结构将事件传递给演员,并基于我正在处理的事件。现在我有了实体,我的新演员是什么?是每个实体都会成为演员吗?如果是,那么在每个动作中,我都会调用所有组件更新函数并在绘图函数中绘制,对吗?
  2. 实体组件系统仅用于演员还是应该将其用于舞台、团体、相机?如果应该全部使用,有人可以帮助理解如何吗?

在 OO 中,这很简单,因为我在组中添加演员并根据事件将事件传递给演员,我会执行适当的任务。抱歉,如果我遗漏了什么,因为在 ECS 中思考对我来说是新的。我开始编写代码,但在考虑整个系统时我感到困惑。我知道如何为演员工作,但如何使它与团队、舞台、相机等一起工作。

4

1 回答 1

4

其实这个问题是无法回答的,因为Stage它本身就是某种实体系统。Stage可以解释为您的实体系统。AGroup将是具有特定组件的所有实体,并且Actors是您的实体。一起使用Stage和自定义实体系统没有多大意义。

某些技术/独特的东西Camera根本不应该被建模为实体。没有必要将所有内容都压入实体系统,最终也不会真正适合。

总的来说,您应该重新考虑为什么您实际上需要一个实体组件系统。这种编程风格背后的主要思想是通过将所有组件组合在内存中来优化内存布局。无论如何,使用 Java 这将非常困难,因为您无法控制对象的精确位置(就像在 C++ 中一样)。另一个动机是拥有可用于实体的抽象可重用组件,但实际上您也可以使用标准 OO 实体层次结构来做到这一点。对于移动设备的小型游戏,您可能无论如何都没有足够的实体,以真正感受到性能上的显着差异,并且在我看来,实体组件系统风格并不适合任何地方。

如果您仍然想坚持下去,请不要使用Stage.

于 2013-11-17T19:54:12.143 回答