我使用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)
有什么建议吗?
由于
答案 0 :(得分:1)
这些函数由输入多路复用器调用,您正在修改它们这些功能(事件回调)。
在通常情况下,应该避免这种情况。
但是如果你找不到更好的替代逻辑,你可以尝试替换
framework.AddInputListener(stage);
与
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
framework.AddInputListener(stage);
}
});
希望这有帮助。