如何清除libgdx监听器

时间:2014-02-17 01:46:33

标签: java libgdx

所以在菜单中我有3个按钮,所有按钮都是相同的。对于主题,唯一重要的是

button2.addListener(new InputListener() {
    @Override
    public boolean touchDown(InputEvent event, float x, float y,
    int pointer, int button) {
        game.setGame();
        dispose();
    return true;
    }
});

然后一切顺利,直到:

button3.clearListeners(); // MainMenu.java:174 line in exeption 

然后exept弹出:

Exception in thread "LWJGL Application" java.lang.IllegalStateException: Invalid between begin/end.
at com.badlogic.gdx.utils.DelayedRemovalArray.clear(DelayedRemovalArray.java:125)
at com.badlogic.gdx.scenes.scene2d.Actor.clearListeners(Actor.java:261)
at com.racostyle.avdelux.MainMenu.dispose(MainMenu.java:174)
at com.racostyle.avdelux.MainMenu$3.touchDown(MainMenu.java:123)
at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:55)
at com.badlogic.gdx.scenes.scene2d.Actor.notify(Actor.java:165)
at com.badlogic.gdx.scenes.scene2d.Actor.fire(Actor.java:136)
at com.badlogic.gdx.scenes.scene2d.Stage.touchDown(Stage.java:277)
at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:300)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:200)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)

编辑:如果我不删除监听器,他们仍然是活动的,并且可以点击,具有exeptions。

2 个答案:

答案 0 :(得分:2)

您似乎在MainMenu.dispose监听器中呼叫actor.touchdownMainMenu.dispose清除按钮上的所有侦听器。 LIBGX不允许这样做。

为什么呢?因为LIBGDX正在调用很多演员的触摸事件。你真的不希望你的游戏功能不同,这取决于你的舞台上添加了订单按钮。

所以,在其他地方打电话给清楚的听众。

因为你无论如何都是在一个dispose方法中这样做,所以我建议你不要删除你的按钮监听器,因为你注册了监听器的演员不应该再次使用。

答案 1 :(得分:-1)

不允许在没有事件的情况下调用clearListeners();

你会在jsfiddle中发布你的代码..我会尝试调试它并添加一些代码.. 谢谢..