Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个键绑定有什么问题?_Java_Swing_Action_Key Bindings_Keystrokes - Fatal编程技术网

Java 这个键绑定有什么问题?

Java 这个键绑定有什么问题?,java,swing,action,key-bindings,keystrokes,Java,Swing,Action,Key Bindings,Keystrokes,为什么当我按W或D时它会上升 有什么问题 D应该向右您正在覆盖动作图中的值,因为您在向上和向右动作中使用了相同的动作名称“pressed” public void buttons(){ int c = WHEN_IN_FOCUSED_WINDOW; Action right = new AbstractAction() { public void actionPerformed(ActionEvent e) {

为什么当我按W或D时它会上升

有什么问题


D应该向右

您正在覆盖动作图中的值,因为您在向上和向右动作中使用了相同的动作名称“pressed”

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

 }
应通过以下方式解决此问题:

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

您正在覆盖动作图中的值,因为您对向上和向右动作使用相同的动作名称“按下”

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

 }
应通过以下方式解决此问题:

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

您确定是键绑定而不是
setVX
方法吗?将调试语句添加到每个
actionPerformed
方法中,查看按
D
是否实际调用
setVX
(通过
actionPerformed
方法)是的,我的setVX是正确的,但当我摆脱setVY actionPerformed之后,我的VX工作就完成了。。我不知道为什么当我放弃我的VY性能时它会起作用。试着向每个
actionPerformed
方法添加调试语句,看看调用了什么以及调用的顺序。我想这可能与你的
停止
操作有关。我不知道执行的操作有什么问题。。可能它只接受两个actionperform not 3您确定这是键绑定而不是
setVX
方法吗?将调试语句添加到每个
actionPerformed
方法中,查看按
D
是否实际调用
setVX
(通过
actionPerformed
方法)是的,我的setVX是正确的,但当我摆脱setVY actionPerformed之后,我的VX工作就完成了。。我不知道为什么当我放弃我的VY性能时它会起作用。试着向每个
actionPerformed
方法添加调试语句,看看调用了什么以及调用的顺序。我想这可能与你的
停止
操作有关。我不知道执行的操作有什么问题。。也许它只接受两个动作,而不是三个动作