在 Libgdx 中完全处理屏幕的正确方法是什么?当前,如果我单击上一个屏幕上的按钮位置,则该按钮仍会执行如果我在该屏幕上时会执行的操作。我应该在方法.dispose()
中尽我所能吗?dispose()
还是有更简单的方法来处理屏幕上的所有内容?
3 回答
不幸的是,没有更简单的方法。这些类不共享任何类型的通用“ Disposable
”接口或类似的东西来自动完成。dispose()
当不再需要时,所有具有方法的东西都需要手动处理。
这对他们自己也是有效的Screens
。切换时Screens
它们不会自动处理,但您需要自己执行此操作(在调用之前Game.setScreen()
)。
另一方面,这没什么大不了的。只需查看您的所有内容Screen
并检查是否必须处理它。如果有 dispose 方法,请dispose()
在Screen
.
但这并不能解释您对最后一个不可见按钮的行为Screen
。我想你使用 aStage
和 used Gdx.input.setInputProcessor(stage);
。当您更改屏幕时,此设置不会更改,您必须将输入处理器设置为Stage
当前的Screen
,或任何处理当前输入的处理器Screen
。这样,“旧”阶段将不再捕获任何输入。
我可以确认这个问题并没有使 inpur 处理器进入一个新阶段。这将导致所描述的“幽灵”按钮。
不幸的是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();
}
...
}