1

我目前正在尝试在 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 存储在数组中,但我不确定这是否是正确的方式,甚至不确定如何实现它。

4

2 回答 2

2

您可以使用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()方法或类似的东西,这可能会更有效。

于 2012-12-04T12:16:15.600 回答
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;)

于 2012-12-04T12:24:19.327 回答