I would make a boolean array of keys down, eg.
1 2 3 4 5 6 7 8 9
| private boolean keydown[255]; public void keyPressed(KeyEvent e) { keydown[e.getKeyCode()] = true; }
public void keyReleased(KeyEvent e) { keydown[e.getKeyCode()] = false; } |
then in the update method go
1 2 3 4 5
| if (keydown[KeyEvent.VK_W]) { velY = -movementSpeed; }
|
What this does is it stores all keypresses, you are no longer hindered by only changing velocity when the keydown or key up events are trigged. You ALWAYS know what key is down and which is not

you can then go
1 2 3 4 5 6 7 8 9 10 11 12
| if (keydown[KeyEvent.VK_A] && keydown[KeyEvent.VK_D]) { } else if (keydown[KeyEvent.VK_A]) { velX = -movementSpeed; } else if (keydown[KeyEvent.VK_D]) { velX = movementSpeed; } |