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