Last week I had a problem with a small Asteroids clone I was making, I couldn’t shoot while moving and couldn’t move to 2 sides at once…
After a lot of googling and trial and error my KeyListener now looks like this:
public class ArrowListener implements KeyListener{
private PlayerModel model;
private boolean left = false;
private boolean right = false;
private boolean up = false;
private boolean down = false;
private boolean space = false;
public ArrowListener(PlayerModel model){
this.model = model;
}
public void keyPressed(KeyEvent e) {
setKey(e.getKeyCode(), true);
doSomething();
}
public void keyTyped(final KeyEvent e) {
// empty
}
public void keyReleased(KeyEvent e) {
setKey(e.getKeyCode(), false);
doSomething();
}
public void setKey(int key, boolean pressed){
if (key == KeyEvent.VK_LEFT) {
left = pressed;
} else if (key == KeyEvent.VK_RIGHT) {
right = pressed;
} else if (key == KeyEvent.VK_UP) {
up = pressed;
} else if (key == KeyEvent.VK_DOWN) {
down = pressed;
} else if (key == KeyEvent.VK_SPACE) {
space = pressed;
}
}
public void doSomething() {
if (left == true) {
model.left();
} if (right == true) {
model.right();
} if (up == true) {
model.up();
} if (down == true) {
model.down();
} if (space == true) {
model.shoot();
}
}
}
Is there anyway to do this any better?
Right now, it’s not 100% right, when you’re pressing space and left at once, and let go of the left arrow you stop shooting too…

)