Language agnostic 如何管理实体显示数据和逻辑数据?

Language agnostic 如何管理实体显示数据和逻辑数据?,language-agnostic,architecture,game-engine,Language Agnostic,Architecture,Game Engine,存储实体的显示数据和逻辑数据的好方法是什么?实体需要放在不同的层上(例如,背景对象放在前景后面,或者敌人总是显示在子弹的下面,等等)。问题是,如何管理这些列表 这似乎是一个合乎逻辑的解决方案吗 我有一个世界物体。世界对象存储所有实体的列表。要创建一个新实体,请转到world.createEntity(type),当创建一个新实体时,world将触发一个entityCreatedCallback函数,通知所有侦听器已创建一个新实体。在我的PlayGameState类中,我将一个侦听器连接到世界以侦

存储实体的显示数据和逻辑数据的好方法是什么?实体需要放在不同的层上(例如,背景对象放在前景后面,或者敌人总是显示在子弹的下面,等等)。问题是,如何管理这些列表

这似乎是一个合乎逻辑的解决方案吗

我有一个世界物体。世界对象存储所有实体的列表。要创建一个新实体,请转到
world.createEntity(type)
,当创建一个新实体时,world将触发一个
entityCreatedCallback
函数,通知所有侦听器已创建一个新实体。在我的
PlayGameState
类中,我将一个侦听器连接到世界以侦听,当创建一个新实体时,我将该实体添加到一个适当的显示层以供以后绘制

然后在游戏循环中,我像这样级联:

allScreens.update() -> world.update() -> allEntities.update()

allScreens.draw() -> playGameScreen.draw() -> allLayers.draw()

这看起来合理吗?

你说的是2D游戏,对吗

我喜欢您的体系结构,因为它将实体的创建与其初始化和使用分离开来。我认为它是干净和可扩展的

在我编写的一个游戏中,我有一个类似的方法,但我的渲染引擎使我很容易,并支持
DisplayGroups
,它会自动以正确的顺序渲染对象。我不知道您使用的是什么技术,但一般来说,如果您使用OpenGL/DirectX硬件渲染,您可以使用Z值来实现效果(字面上是将背景对象放在后面)

在使用软件渲染的情况下,我认为除了在曲面上绘制对象之前对对象进行排序之外,没有其他选择