在ECS(Ashley)中的系统之间共享数据

时间:2017-01-23 12:50:03

标签: libgdx entity

我目前正在使用Ashley重组我的LibGDX-Projekt以适应ECS-Structure。 目前我有以下系统结构:

  • InputSystem(处理播放器输入)
  • PhysicSystem(将速度应用于实体,进行碰撞检测并移动它们)
  • CameraSystem(将相机调整到相机对焦)
  • RenderingSystem(使用摄像机信息转换SpriteBatch并绘制所有实体)

现在我知道每个系统都应该包含它需要的所有逻辑,并且被封装以减少复杂性。 但我需要在CameraSystem中调整相机,我需要在RenderSystem中应用相机转换,我需要在InputSystem中查看鼠标所指向的位置。你如何用ECS-Approach解决这个问题?系统可以相互通信吗?我应该只使用名为" SharedData"在哪里我转储多个系统需要的所有东西?对我来说似乎有点难看。

提前致谢:)

1 个答案:

答案 0 :(得分:1)

是的,使用单身人士首先会破坏使用ECS的目的。在ECS中,使用的方法是使用实​​体表示所有共享数据。拥有Entity类型是完全没问题的,在游戏的生命周期中只有一次它的实例。

Engine添加到EntiySystem时,可以直接从World访问这些内容。另一种方法可能是将经常访问的实体传递给系统的构造函数(如果经常访问它),过去我使用它来传递Box2D Entity实体。

我相信我的代码可以更好地解释我的推理,所以你可以看一下我之前使用Ashley的游戏。 https://github.com/basimkhajwal/LSD

PS - 我的项目还包括一个事件队列,用于在不同的实体系统之间进行消息传递(不传递数据,所有数据仍然封装在paginate类中),我发现它们有用。