精灵的对角线运动

如何实现对精灵的对角移动? 我创建了一个可移动的精灵(矩形),它在四个方向上移动。

为了使矩形设置动画,使用了计时器对象和动作执行方法。 我在keyPressed和keyReleased方法中实现了以下代码,以便在四个方向上移动它。

public void keyPressed(KeyEvent arg0){ int c=arg0.getKeyCode(); if(c==KeyEvent.VK_LEFT){ velx=-4; vely=0; } else if(c==KeyEvent.VK_RIGHT){ velx=4; vely=0; } else if(c==KeyEvent.VK_UP){ velx=0; vely=-4; } else if(c==KeyEvent.VK_DOWN){ velx=0; vely=4; } } public void keyReleased(KeyEvent arg0){ velx=0; vely=0; } 

以下是基于您上次评论的代码:

 // Set of currently pressed keys private final Set pressed = new TreeSet(); @Override public void keyPressed(KeyEvent arg0) { int c = arg0.getKeyCode(); pressed.add(c); if (pressed.size() > 1) { Integer[] array = pressed.toArray(new Integer[] {}); if (array[0] == KeyEvent.VK_LEFT && array[1] == KeyEvent.VK_UP) { velx = -4; vely = -4; } else if (array[0] == KeyEvent.VK_UP && array[1] == KeyEvent.VK_RIGHT) { velx = 4; vely = 4; } else if (array[0] == KeyEvent.VK_RIGHT && array[1] == KeyEvent.VK_DOWN) { velx = 4; vely = -4; } else if (array[0] == KeyEvent.VK_LEFT && array[1] == KeyEvent.VK_DOWN) { velx = -4; vely = 4; } } else { if (c == KeyEvent.VK_LEFT) { velx = -4; vely = 0; } else if (c == KeyEvent.VK_RIGHT) { velx = 4; vely = 0; } else if (c == KeyEvent.VK_UP) { velx = 0; vely = -4; } else if (c == KeyEvent.VK_DOWN) { velx = 0; vely = 4; } } } @Override public void keyReleased(KeyEvent arg0) { velx = 0; vely = 0; pressed.remove(Integer.valueOf(arg0.getKeyCode())); } 

不要使用KeyListener。 Swing旨在与Key Bindings一起使用。

有关更多信息和使用Key Bindings的完整解决方案,请查看使用键盘进行运动 。