0

我在这里有这段代码(使用 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);

有人有什么见解可以分享吗?

4

2 回答 2

6

KEY_ESCAPE 的值是多少?

它可能是值为 1 的 int ,因此不是删除具有该值的对象,而是删除位置 1 处的对象,该对象显然不存在。

于 2013-05-14T17:15:24.773 回答
3

ArrayList.remove 需要一个 int 参数作为要删除元素的索引。在您的情况下, KEY_ESCAPE 也恰好是一个整数。

简而言之,您尝试删除转义键的整数值作为ArrayList的索引!

于 2013-05-14T17:17:06.070 回答