检查数组中的多个值

时间:2012-12-04 12:13:43

标签: java slick2d

我目前正在尝试在Slick2d框架中制作一个小聊天游戏。框架有一个名为

的方法
isKeyPressed()

以及我可以用来检查的一长串变量。例如:

input.KEY_A

目前,我可以注册一封信的唯一方法是获得这些检查员的完整列表:

if (input.isKeyPressed(input.KEY_A)) {
    this.text += "a";
}
if (input.isKeyPressed(input.KEY_B)) {
    this.text += "b";
}
if (input.isKeyPressed(input.KEY_C)) {
    this.text += "c";
}

有没有更明智的方法可以做到这一点?

我可以想象我能够以某种方式将input.KEYS存储在数组中,但我不确定这是否是正确的方法,甚至是如何实现它。

2 个答案:

答案 0 :(得分:2)

您可以使用a HashMap来存储映射(!) - 假设KEY_XX是整数,例如,它可能如下所示:

private static final Map<Integer, String> mapping = new HashMap<Integer, String> () {{
    put(input.KEY_A, "a");
    put(input.KEY_B, "b");
    //etc
}};


for (Map.Entry<Integer, String> entry : mapping.entrySet()) {
    if (input.isKeyPressed(entry.getKey()) this.text += entry.getValue();
}

如果地图始终相同,则可以将地图设为静态,因此您只需填充一次 注意:如果您使用input.getKeyPressed()方法或类似方法,这可能会更有效。

答案 1 :(得分:1)

 Map<Integer,Character> keyWithLetterMap = new HashMap<Integer,Character>();
 //populates initially the map, for instance: keyWithLetterMap.put(input.KEY_A, 'a');

 for (Map.Entry<Integer, Character> keyWithLetter : keyWithLetterMap.entrySet()) {
     if(input.isKeyPressed(keyWithLetter.getKey())) 
        this.text += keyWithLetter.getValue();
 }

否则,甚至更好的方法,使用enum代替Map;)