在Libgdx中完全处理屏幕的正确方法是什么?目前,如果我单击上一个屏幕上的按钮所在的位置,那么按钮仍然可以完成我在屏幕上的操作。我应该.dispose()
在dispose()
方法中尽我所能吗?或者是否有更简单的方法来处理屏幕上的所有内容?
答案 0 :(得分:17)
不幸的是没有更简单的方法。这些类不会共享任何类型的常见“Disposable
”界面,或类似的东西,以自动执行此操作。具有dispose()
方法的所有内容都需要在不再需要时手动处理。
这对Screens
本身也有效。切换Screens
时,它们不会自动处理,但您需要自己执行此操作(在致电Game.setScreen()
之前)。
另一方面,这不是什么大问题。只需浏览Screen
中的所有内容,然后检查是否需要处理。如果有处置方法,请在dispose()
的{{1}}中进行调用。
但这并不能解释您对上一个Screen
中隐形按钮的行为。我想你使用了Screen
并使用了Stage
。更改屏幕时不会更改此设置,您必须将输入处理器设置为当前Gdx.input.setInputProcessor(stage);
的{{1}},或处理当前Stage
中输入的任何内容。这样“旧”阶段就不会再有任何输入了。
答案 1 :(得分:2)
我可以确认这个问题没有将输入过程传递到一个新阶段。这将导致所描述的“鬼”按钮。
答案 2 :(得分:0)
请注意,不会自动调用dispose()。
所以我所做的是将所有一次性用品(例如Stage
,Skin
,Texture
...等)放入屏幕中的hide()
方法中,因为{{ 1}}自动调用,效果很好!
示例:
hide()