如何完全处理Libgdx中的屏幕?目前,如果我在上一个屏幕上单击按钮所在的位置,该按钮仍会执行与该屏幕相同的操作。我应该在dispose()
方法中尽可能地.dispose()
所有东西吗?还是有更简单的方法来处理屏幕上的所有内容?
很不幸,没有更简单的方法。这些类没有任何共同的"Disposable
"接口或其他自动执行此操作的方式。当不再需要拥有dispose()
方法的所有内容时,需要手动清理。
对于Screens
本身也是如此。切换Screens
时它们不会自动被清理,但您需要自己进行清理(在调用Game.setScreen()
之前)。
另一方面,这并不是什么大问题。只需浏览您Screen
中的所有内容,并检查它是否需要清理。如果存在一个dispose
方法,请在Screen
的dispose()
中调用它。
但这并不能解释您上一个Screen
中看不到按钮的行为。我想您使用了Stage
并且使用了Gdx.input.setInputProcessor(stage);
。当您更改屏幕时,这种设置不会更改,您必须将输入处理器设置为当前Screen
的Stage
或处理当前Screen
输入的任何其他组件。这样,“旧”的舞台就不会再捕捉到任何输入了。
我可以确认,这个问题是因为输入处理器没有通过新阶段。这将导致如所描述的“幽灵”按钮。
不幸的是LibGDX API文档中提到:
请注意,dispose()不会自动调用。
所以我在Screen的hide()
方法中处理所有可处理的对象(例如Stage
、Skin
、Texture
等),因为hide()
方法会自动调用,这样做非常有效!
例如:
public class GameScreen implements Screen {
...
@Override
public void hide() {
mainStage.dispose();
playGroundStage.dispose();
controller.dispose();
labelActor.dispose();
}
...
}