【问题标题】:Proper way to dispose screens in Libgdx在 Libgdx 中处理屏幕的正确方法
【发布时间】:2013-10-15 22:34:29
【问题描述】:

在 Libgdx 中完全处理屏幕的正确方法是什么?当前,如果我单击上一个屏幕上的按钮位置,则该按钮仍会执行如果我在该屏幕上时会执行的操作。我是否应该在dispose() 方法中尽我所能做到.dispose()?还是有更简单的方法来处理屏幕上的所有内容?

【问题讨论】:

    标签: java android libgdx dispose


    【解决方案1】:

    不幸的是,没有更简单的方法。这些类不共享任何类型的通用“Disposable”接口或类似的接口来自动完成。所有具有dispose() 方法的东西都需要在不再需要时手动处理。

    这对Screens 本身也有效。切换Screens 时,它们不会自动处理,但您需要自己处理(在调用Game.setScreen() 之前)。

    另一方面,这没什么大不了的。只需查看您的 Screen 中的所有内容,然后检查是否必须处理它。如果有dispose方法,在Screendispose()中调用。

    但这并不能解释您对上一个 Screen 中不可见按钮的行为。我想您使用Stage 并使用Gdx.input.setInputProcessor(stage);。当您更改屏幕时,此设置不会更改,您必须将输入处理器设置为当前ScreenStage,或者设置为处理当前Screen 中输入的任何内容。这样,“旧”阶段将不再捕获任何输入。

    【讨论】:

    • 至于所有变量?我将如何处理它们?
    • @user2341336 你到底指的是哪些变量?我将大部分需要在 Screen 开关上处理的东西保留为 Screen 类本身的私有属性,因为它在逻辑上属于 Screen。
    【解决方案2】:

    我可以确认这个问题不会使 inpur 处理器进入新阶段。这将导致所描述的“幽灵”按钮。

    【讨论】:

      【解决方案3】:

      不幸的是LibGDX API documentation

      注意 dispose() 不会自动调用。

      所以我要做的是在 Screen 中的 hide() 方法中处理所有一次性用品(例如 StageSkinTexture ... 等),因为 hide() 是自动调用的,并且非常有效好吧!

      示例:

      public class GameScreen implements Screen {
      ...
          @Override
          public void hide() {
              mainStage.dispose();
              playGroundStage.dispose();
              controller.dispose();
              labelActor.dispose();
          }
      ...
      }
      

      【讨论】:

      • 我不建议在 hide() 方法中处理东西,因为如果有人打电话给你,它会在 android 上调用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多