1
public void buttons(){
     int c = WHEN_IN_FOCUSED_WINDOW;

        Action right = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                player.setVX(2);
            }
        };
        Action stop = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                player.setVX(0);
                player.setVY(0);
            }
        };

        Action up = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                player.setVY(-2);
            }
        };
           getInputMap(c).put(KeyStroke.getKeyStroke("D"), "pressed");
           getActionMap().put("pressed", right);
           getInputMap(c).put(KeyStroke.getKeyStroke("released D"), "released");
           getActionMap().put("released", stop);
           getInputMap(c).put(KeyStroke.getKeyStroke("W"), "pressed");
           getActionMap().put("pressed", up);
           getInputMap(c).put(KeyStroke.getKeyStroke("released W"), "released");
           getActionMap().put("released", stop);

 }

WやDを押すと上がるのはなぜですか...

何が問題ですか?

Dは右に行く必要があります

4

1 に答える 1

4

上と右の両方のアクションに同じアクション名 "pressed" を使用しているため、アクション マップの値を上書きしています。

getInputMap(c).put(KeyStroke.getKeyStroke("D"), "pressed");
getActionMap().put("pressed", right);
getInputMap(c).put(KeyStroke.getKeyStroke("released D"), "released");
getActionMap().put("released", stop);
getInputMap(c).put(KeyStroke.getKeyStroke("W"), "pressed");
getActionMap().put("pressed", up); // this overwrites the "pressed" action name above with the up action
getInputMap(c).put(KeyStroke.getKeyStroke("released W"), "released");
getActionMap().put("released", stop); // similarly, this is redundant because you have the same thing above

以下で修正する必要があります。

getInputMap(c).put(KeyStroke.getKeyStroke("D"), "right");
getInputMap(c).put(KeyStroke.getKeyStroke("released D"), "stop");
getInputMap(c).put(KeyStroke.getKeyStroke("W"), "up");
getInputMap(c).put(KeyStroke.getKeyStroke("released W"), "stop");
getActionMap().put("right", right);
getActionMap().put("up", up);
getActionMap().put("stop", stop);
于 2013-02-27T04:14:58.503 に答える