1

我需要从文件中读取可定制的操作并将它们绑定到程序的键。

如果我有这样的文件:

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

然后当我的 keylistener 方法被调用时,它会:

public void keyPressed(int keycode) {
    keybindings.get(keycode).doAction();
}

并且doAction()会在每个Action班级。所以如果我有Up(),它会调用person.moveUp()

如果我要重新绑定我的大部分键,可能会导致数百个只有几行的类。

上面的概念有一些东西,一个 switch 语句让我想避免它们。这样做有“更清洁”的技巧吗?

作为我的意思的一个例子,Eclipse 有你可以在首选项中设置的键绑定,所以当你按下一个键时,它会触发一个事件并根据这些设置解释键应该做什么。我正在尝试这样做。

4

1 回答 1

1

与其自己创建,不如Map使用Key BindingsLinePanel是一个例子。您可能能够参数化或重构您的Action实现以减轻扩散。要保留用户定义的键分配,您可以调整此处引用的示例中使用的方法。

于 2013-01-29T21:06:00.393 回答