【发布时间】:2013-05-14 17:11:42
【问题描述】:
我在这里有这段代码(使用 lwjgl,但应该没有实际意义)尝试在按下 esc 键时暂停游戏。我使用带有键的 ArrayList 来跟踪按下的内容和未按下的内容。
public List<Integer> keys = new ArrayList<Integer>();
public void get() {
if (isKeyDown(KEY_ESCAPE) && !keys.contains(KEY_ESCAPE)) {
keys.add(KEY_ESCAPE);
keyEscape();
}
}
public void rem() {
if (!isKeyDown(KEY_ESCAPE) && keys.contains(KEY_ESCAPE))
keys.remove(KEY_ESCAPE);
}
private void keyEscape() {
Screen.paused ^= true;
}
这是由循环调用的,它在循环中一个接一个地执行get() 和rem(),按此顺序。当我松开 ESC 时,这给了我一个很棒的 java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 keys.remove(KEY_ESCAPE);。
有人有什么见解可以分享吗?
【问题讨论】:
-
为什么不使用
boolean标志而不必每次都检查ArrayList?似乎不必要地昂贵。 -
考虑使用
enum代替Integer值作为键值