实体系统中的多种运动源
我对实体系统这个概念还很陌生,已经阅读了很多东西(最有用的是这个很棒的博客和这个答案)。 尽管我在理解如何通过不确定数量的源操纵对象的位置这样简单的事情上遇到了一些麻烦。 也就是说,我有我的实体,该实体具有职位组成部分。然后,我在游戏中发生了一些事件,告诉该实体在给定时间内移动给定距离。 这些事件可以随时发生,并且具有不同的位置和时间值。结果是将它们混合在一起。 在传统的OO解决方案中,我会有某种MoveBy类,其中包含距离/时间,以及在我的游戏对象类内部的数组。每帧,我都要遍历所有MoveBy,然后将其应用于该位置。如果a MoveBy已达到结束时间,请从阵列中将其删除。 对于实体系统,我对如何复制这种行为感到有些困惑。 如果一次只有一个,而不是能够将它们复合在一起,那将是相当简单的(我相信),并且看起来像这样: PositionComponent 包含 x, y MoveByComponent 包含 x, y, time Entity同时具有a PositionComponent和aMoveByComponent MoveBySystem查找具有这两个组成部分的实体,并将的值添加MoveByComponent到中PositionComponent。当time到达,它会从该实体的组件。 我对于在很多情况下如何做同样的事情有些困惑。 我最初的想法是我会: PositionComponent,MoveByComponent与上述相同 MoveByCollectionComponent其中包含MoveByComponents 的数组 MoveByCollectionSystem查找具有PositionComponent和的实体,并在MoveByCollectionComponent其中的MoveByComponents中进行迭代,并根据需要应用/删除。 我猜这是一个更普遍的问题,具有许多相同的组件,并且希望有一个相应的系统对每个组件起作用。我的实体将其组件包含在组件类型->组件的哈希中,因此每个实体严格只有一种特定类型的组件。 这是看待这个问题的正确方法吗? 实体是否应该始终始终只有一种给定类型的组件?