2012-12-04 72 views
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存儲在數組中,但我不確定這是否是正確的方式,甚至不知道如何實現它。

+0

不是更聰明的方式,但最初我想有一個嵌套的if-else而不是數以百萬計的if語句。 – PermGenError

回答

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;)

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()方法或類似方法,這可能會更有效。

+0

地圖是要走的路,但爲什麼你不打破nunchuks並添加一些java功夫:初始化塊將綁定所有的聲明? – Bohemian

+0

不編譯;) – Mik378

+0

的確,不編譯! :) –