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 に答える