2013-02-27 71 views
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應該向右走

+0

你確定它的鍵綁定,而不是'setVX'方法?爲每個'actionPerformed'方法添加一個調試語句,以查看按下'D'是否實際上調用'setVX'(通過'actionPerformed'方法) – MadProgrammer 2013-02-27 03:50:41

+0

是的,我的setVX是正確的,但是當我擺脫我的setVY動作執行 – user2113792 2013-02-27 04:01:16

+0

我的VX的工作..我不知道爲什麼它工作時,我擺脫我的VY ation執行 – user2113792 2013-02-27 04:01:57

回答

4

你在你的動作映射,因爲你使用的是同一個動作命名爲「按下」兩個向上和正確的行動覆蓋值。

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