removeProcessor的奇怪错误?

时间:2013-12-25 16:38:13

标签: java libgdx

我使用KeyUp事件来删除舞台对象的事件。我做了什么:

@Override
public boolean keyUp(int keycode) {
    if (keycode == consoleKeyToggle) {
        show = !show;
        if (show)
            framework.AddInputListener(stage);
        else
            framework.RemoveInputListener(stage);
    }
    return false;
}

在框架对象中我有两个函数:

@Override
public void AddInputListener(InputProcessor input) {
    multiplexer.addProcessor(input);
}

@Override
public void RemoveInputListener(InputProcessor input) {
    multiplexer.removeProcessor(input);
}

AddInputListener很好,但是当调用RemoveInputListener时,我收到此错误:

Exception in thread "LWJGL Application" java.lang.IndexOutOfBoundsException: index can't be >= size: 2 >= 2
    at com.badlogic.gdx.utils.Array.get(Array.java:127)
    at com.badlogic.gdx.InputMultiplexer.keyUp(InputMultiplexer.java:76)
    at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:288)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:199)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:1)

这些函数由输入多路复用器调用,您正在修改它们这些功能(事件回调)。
在通常情况下,应该避免这种情况。

但是如果你找不到更好的替代逻辑,你可以尝试替换

framework.AddInputListener(stage);

Gdx.app.postRunnable(new Runnable() {
    @Override
    public void run() {
        framework.AddInputListener(stage);
    }
});

希望这有帮助。