ファイルから読み取ったカスタマイズ可能なアクションを取り込み、それらをプログラムのキーにバインドする必要があります。
次のようなファイルがある場合:
w:up
s:down
a:left
d:right
これを実行するにはどうすればよいですか?
私がそれを見る唯一の方法はこれを行うことです:
// hardcoded String to Action to turn "up" into an actual instruction
HashMap<String, Action> actions = new HashMap<String, Action();
actions.put("up", new Up());
actions.put("down", new Down()); // etc.
HashMap<Integer, Action> keybindings = new HashMap<Integer, Action>();
while (!endOfFile) {
int key = letterToKeycode(getKey()); // gets keycode for letter
Action action = actions.get(getCommand());
keybindings.put(key, action);
endOfFile = isEndOfFile();
}
次に、キーリスナー メソッドが呼び出されると、次のようになります。
public void keyPressed(int keycode) {
keybindings.get(keycode).doAction();
}
そしてdoAction()
各Action
クラスになります。もし私が持っていたらUp()
、それは呼び出すでしょうperson.moveUp()
。
キーの大部分を再バインドすると、数行の長さのクラスが数百個になる可能性があります。
上記の概念には何かがあり、単一の switch ステートメントでそれらを避けたいと思うようになります。これを行うための「よりクリーンな」トリックはありますか?
たとえば、Eclipse には設定で設定できるキーバインドがあるため、キーを押すとイベントが発生し、それらの設定に基づいてキーの動作が解釈されます。私はこれをやろうとしています。