8

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

4

3 回答 3

19

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

这对他们自己也是有效的Screens。切换时Screens它们不会自动处理,但您需要自己执行此操作(在调用之前Game.setScreen())。

另一方面,这没什么大不了的。只需查看您的所有内容Screen并检查是否必须处理它。如果有 dispose 方法,请dispose()Screen.

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

于 2013-10-16T04:30:12.483 回答
2

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

于 2014-01-14T05:28:46.780 回答
0

不幸的是LibGDX API 文档

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

所以我所做的就是在 Screen 的方法中处理所有一次性用品(例如Stage, Skin, Texture... 等),因为它是自动调用的,而且效果很好!hide()hide()

例子:

public class GameScreen implements Screen {
...
    @Override
    public void hide() {
        mainStage.dispose();
        playGroundStage.dispose();
        controller.dispose();
        labelActor.dispose();
    }
...
}
于 2016-02-29T11:37:36.820 回答