【问题标题】:How to manage entity display data and logical data?如何管理实体显示数据和逻辑数据?
【发布时间】:2011-07-06 06:51:09
【问题描述】:

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

这看起来像一个合乎逻辑的解决方案吗?

我有一个 World 对象。 World 对象存储所有实体的列表。要创建一个新实体,您可以使用world.createEntity(type),当创建一个新实体时,世界会触发一个entityCreatedCallback 函数,通知所有侦听器一个新实体已创建。在我的PlayGameState 类中,我将一个侦听器附加到世界以进行侦听,当创建一个新实体时,我将该实体添加到适当的显示层以供稍后绘制。

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

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

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

这看起来合理吗?

【问题讨论】:

    标签: language-agnostic architecture game-engine


    【解决方案1】:

    您说的是 2D 游戏,对吧?

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

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

    如果您使用软件渲染,我认为除了在将对象绘制到表面之前对其进行排序之外别无选择。

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-16
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多