【发布时间】:2013-10-15 22:34:29
【问题描述】:
在 Libgdx 中完全处理屏幕的正确方法是什么?当前,如果我单击上一个屏幕上的按钮位置,则该按钮仍会执行如果我在该屏幕上时会执行的操作。我是否应该在dispose() 方法中尽我所能做到.dispose()?还是有更简单的方法来处理屏幕上的所有内容?
【问题讨论】:
标签: java android libgdx dispose
在 Libgdx 中完全处理屏幕的正确方法是什么?当前,如果我单击上一个屏幕上的按钮位置,则该按钮仍会执行如果我在该屏幕上时会执行的操作。我是否应该在dispose() 方法中尽我所能做到.dispose()?还是有更简单的方法来处理屏幕上的所有内容?
【问题讨论】:
标签: java android libgdx dispose
不幸的是,没有更简单的方法。这些类不共享任何类型的通用“Disposable”接口或类似的接口来自动完成。所有具有dispose() 方法的东西都需要在不再需要时手动处理。
这对Screens 本身也有效。切换Screens 时,它们不会自动处理,但您需要自己处理(在调用Game.setScreen() 之前)。
另一方面,这没什么大不了的。只需查看您的 Screen 中的所有内容,然后检查是否必须处理它。如果有dispose方法,在Screen的dispose()中调用。
但这并不能解释您对上一个 Screen 中不可见按钮的行为。我想您使用Stage 并使用Gdx.input.setInputProcessor(stage);。当您更改屏幕时,此设置不会更改,您必须将输入处理器设置为当前Screen 的Stage,或者设置为处理当前Screen 中输入的任何内容。这样,“旧”阶段将不再捕获任何输入。
【讨论】:
我可以确认这个问题不会使 inpur 处理器进入新阶段。这将导致所描述的“幽灵”按钮。
【讨论】:
注意 dispose() 不会自动调用。
所以我要做的是在 Screen 中的 hide() 方法中处理所有一次性用品(例如 Stage、Skin、Texture ... 等),因为 hide() 是自动调用的,并且非常有效好吧!
示例:
public class GameScreen implements Screen {
...
@Override
public void hide() {
mainStage.dispose();
playGroundStage.dispose();
controller.dispose();
labelActor.dispose();
}
...
}
【讨论】: