【问题标题】:Is it safe to call Screen.hide() after Screen.dispose() in LibGDX?在 LibGDX 中的 Screen.dispose() 之后调用 Screen.hide() 是否安全?
【发布时间】:2017-02-22 10:52:27
【问题描述】:

在 libgdx 中,screen.setScreen() 不会自动正确调用 dispose。在被覆盖的 setScreen 中,我必须先调用 screen.dispose 然后再调用 super.setScreen 还是先调用后者? 我知道这似乎是重复的问题,但我仍然想知道,因为super.setScreen 调用screen.hide。在dispose 运行时之后调用hide 是否安全? 这是一个不好的做法吗? 我正在制作基于 thisthis 示例的 3D 游戏。 在这里,我将GameName 类扩展为Game 并尝试覆盖setScreen,以便在屏幕不为空时调用dispose,然后调用super.setScreen

【问题讨论】:

    标签: java android libgdx game-engine


    【解决方案1】:

    screen.dispose() 永远不会被 LibGDX 调用。在删除对屏幕的引用之前,您必须自己手动完成。如果您不打算重用 Screen 实例,让 screen.hide() 调用 screen.dispose() 是最好的选择。

    screen.hide() 永远不会被调用以响应 Android 事件。

    我不建议覆盖 game.setScreen() 来处理屏幕,除非您确定自己不想重用任何屏幕实例。在大多数简单的游戏中,您确实希望重复使用它们,而不是浪费时间反复卸载和重新加载资源。

    【讨论】:

      【解决方案2】:

      两种一次性资产(SpriteBatch、Texture、Stage,...),一种在不同屏幕上共享,另一种特定于特定屏幕。

      1. 应通过游戏的dispose() 方法处理共享资产。

      2. 应通过 Screen 的 dispose() 方法处置特定于屏幕的资源,但屏幕的 dispose() 从未调用过,因此您需要显式调用它。

      当您更改屏幕的hide() 方法时,您应该从hide() 方法调用dispose() 方法。

      【讨论】:

      • 但在 Android 中,当用户接到电话或游戏失去焦点时,会调用 hide。所以在 hide 中添加 dispose 是个坏主意。
      • @Anutrix 认为 Screen 的 hide() 方法调用了 Android 的 hide()。两者是不同的方法。
      • @Anutrix,不,它没有。 pause() 在游戏失去焦点时被调用,而不是 hide()
      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多