2013-02-27 5 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'? Добавьте инструкцию debug к каждому из методов 'actionPerformed', чтобы увидеть, действительно ли нажатие' D' вызывает 'setVX' (методом' actionPerformed') – MadProgrammer

+0

да мой setVX прав, но когда я избавлюсь от своего setVY actionperformed – user2113792

+0

my VX work .. Я не знаю, почему он работает, когда я избавился от моего VY ation. – user2113792

ответ

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); 
Смежные вопросы