我使用 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)
有什么建议吗?
谢谢
最佳答案
这些函数正在由输入多路复用器调用,并且您正在这些函数(事件回调)内修改它。
通常情况下应该避免这种情况。
但如果你找不到更好的替代逻辑,你可以尝试替换
framework.AddInputListener(stage);
与
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
framework.AddInputListener(stage);
}
});
希望这有帮助。
关于java - removeProcessor 出现奇怪的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774828/