【问题标题】:Best way to handle sprites in games with different screens in libgdx在 libgdx 中处理具有不同屏幕的游戏中的精灵的最佳方法
【发布时间】:2017-10-25 19:37:32
【问题描述】:

又是一天,又是一个问题。

我有一个精灵,其中包含 livesRemaining 等字段。

假设我在游戏主屏幕上掉了下来,然后使用setScreen 方法将屏幕切换到“剩余生命”屏幕。我的问题是 livesRemaing 字段现在丢失了。

我的问题是处理这些“全局游戏变量”的最佳方式是什么,它们应该是屏幕之间的转换。

我应该:

  1. 在游戏类中创建一个精灵并将其传递到不同的屏幕?
  2. 在每个屏幕上创建一个新的 sprite 并将“全局游戏变量”保留在主 Game 类中?

我不确定是否有最好的方法来解决这个问题,或者这只是个人喜好问题。

任何建议将不胜感激。

提前致谢!

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    使用缓存可以很好地避免对象的创建/销毁(由于“实时”游戏中的垃圾收集器,这在 java 上是昂贵的)。似乎您需要更好的数据结构来处理所有游戏设计以避免这些问题。您的选项 1 是最接近好的方法,但这取决于总体设计。

    【讨论】:

    • 我同意你的观点。我认为选项 1 在性能方面最有意义。将这些变量保存在 sprite 对象中也更有意义,并且在更改时我对传递到屏幕的内容具有更大的灵活性。
    【解决方案2】:

    我有一个静态类,其中包含对我的游戏、游戏屏幕和游戏摄像机的静态引用。

    如果您这样做,您就可以在任何地方访问游戏的任何组件。

    IE 游戏玩家 或者 gamecamera.unproject()

    【讨论】:

      【解决方案3】:

      我发现你的问题很有趣,因为我最终遇到了问题/疑问。如果我最终创建了一个 ECSSystem of Entities)系统,我最终会看到除了内存成本之外,将精灵值传递到下一个屏幕一个糟糕的 ECS 系统实践,所以我决定为玩家创建全局变量,因为如果你意识到世界在玩家之上旋转并且它具有存储玩家生活信息的重要性,但有一件事我可以告诉您认为这非常微妙,因为我们可以以不同的方式拥有系统,正如 francogp 所说,这完全取决于您使用的设计和设计模式。

      【讨论】:

        猜你喜欢
        • 2015-07-22
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 2014-01-19
        相关资源
        最近更新 更多