Java 如何使按键绑定同时可按
所以我不能同时使用两把钥匙,我希望能做到这一点 我的代码在这里: 如果您尝试同时移动这两个对象,则只有一个会移动,或者没有一个会移动。 我认为这与这里的代码有关:Java 如何使按键绑定同时可按,java,swing,Java,Swing,所以我不能同时使用两把钥匙,我希望能做到这一点 我的代码在这里: 如果您尝试同时移动这两个对象,则只有一个会移动,或者没有一个会移动。 我认为这与这里的代码有关: public KeyBidings(){ Action upAction = new AbstractAction(){ public void actionPerformed(ActionEvent e) { y2 -=10; }
public KeyBidings(){
Action upAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
y2 -=10;
}
};
Action downAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
y2 +=10;
}
};
Action wAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
y -=10;
}
};
Action sAction = new AbstractAction(){
public void actionPerformed(ActionEvent e) {
y +=10;
}
};
drawPanel.repaint();
InputMap inputMap = drawPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
ActionMap actionMap = drawPanel.getActionMap();
inputMap.put(KeyStroke.getKeyStroke("DOWN"), "downAction");
actionMap.put("downAction", downAction);
inputMap.put(KeyStroke.getKeyStroke("UP"), "upAction");
actionMap.put("upAction", upAction);
inputMap.put(KeyStroke.getKeyStroke("S"), "sAction");
actionMap.put("sAction", sAction);
inputMap.put(KeyStroke.getKeyStroke("W"), "wAction");
actionMap.put("wAction", wAction);
触发键绑定时,
DrawPanel
更新的原因是什么?@MadProgrammer查看pastebin Paste的第118行,在paint
方法中不要调用repaint
——这将导致无休止的问题。改用Swing定时器。这是一个比较普遍的问题。不要更新键的操作
中值的状态,而是使用状态值指示是否按下,并使用计时器
根据此状态更新模型-因为一次只为一个键生成事件。因此,您需要跟踪所有按下的键(在地图或其他东西中),然后在释放键时移除这些键。然后,您的运动将基于地图中的所有关键点。退房KeyboardAnimation.java
代码包含一个完整的工作示例,演示了一种方法。触发键绑定时,DrawPanel
更新的原因是什么?@MadProgrammer查看pastebin pasteDO的第118行,在paint
方法中不调用repaint
,这将导致你的问题没完没了。改用Swing定时器。这是一个比较普遍的问题。不要更新键的操作
中值的状态,而是使用状态值指示是否按下,并使用计时器
根据此状态更新模型-因为一次只为一个键生成事件。因此,您需要跟踪所有按下的键(在地图或其他东西中),然后在释放键时移除这些键。然后,您的运动将基于地图中的所有关键点。退房KeyboardAnimation.java
代码包含一个完整的工作示例,演示了一种方法。