I am trying to create a game so that the player can move in all directions (N,NW,W,SW,S,SE,E,NE) although when I capture the key strokes it will move me once in one of the diagonal directions then, but if I hold them down it switches to one of the cardinal directions(N,W,S,E).
Main Class Key Listener
private class MultiKeyPressListener extends KeyAdapter {
private final Set<Character> pressed = new HashSet<Character>();
@Override
public synchronized void keyPressed(KeyEvent e) {
pressed.add(e.getKeyChar());
if(pressed.size() > 1){
System.out.println(pressed);
//LEFT UP PRESSED
if (e.getKeyCode() == KeyEvent.VK_LEFT && e.getKeyCode() == KeyEvent.VK_UP
|| e.getKeyCode() == KeyEvent.VK_A && e.getKeyCode() == KeyEvent.VK_W) {
player.direction = "NW";
}
//UP RIGHT PRESSED
if (e.getKeyCode() == KeyEvent.VK_UP && e.getKeyCode() == KeyEvent.VK_RIGHT
|| e.getKeyCode() == KeyEvent.VK_W && e.getKeyCode() == KeyEvent.VK_D) {
player.direction = "NE";
}
//RIGHT DOWN PRESSED
if (e.getKeyCode() == KeyEvent.VK_RIGHT && e.getKeyCode() == KeyEvent.VK_DOWN
|| e.getKeyCode() == KeyEvent.VK_S && e.getKeyCode() == KeyEvent.VK_D) {
player.direction = "SE";
}
}else{
//DOWN LEFT PRESSED
if (e.getKeyCode() == KeyEvent.VK_LEFT && e.getKeyCode() == KeyEvent.VK_DOWN
|| e.getKeyCode() == KeyEvent.VK_S && e.getKeyCode() == KeyEvent.VK_A) {
player.direction = "SW";
}
//LEFT PRESSED
if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_A) {
player.direction = "W";
}
//DOWN PRESSED
if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_S) {
player.direction = "S";
}
//RIGHT PRESSED
if (e.getKeyCode() == KeyEvent.VK_RIGHT || e.getKeyCode() == KeyEvent.VK_D) {
player.direction = "E";
}
//UP PRESSED
if (e.getKeyCode() == KeyEvent.VK_W || e.getKeyCode() == KeyEvent.VK_UP) {
player.direction = "N";
}
}
player.move();
}
@Override
public synchronized void keyReleased(KeyEvent e) {
pressed.remove(e.getKeyChar());
}
}
Player Class
public void move(){
if(direction.equals("N")){
y-= moveRate;
}else if(direction.equals("NW")){
y-= moveRate;
x-= moveRate;
}else if(direction.equals("W")){
x-= moveRate;
}else if(direction.equals("SW")){
x-= moveRate;
y+= moveRate;
}else if(direction.equals("S")){
y+= moveRate;
}else if(direction.equals("SE")){
y+= moveRate;
x+= moveRate;
}else if(direction.equals("E")){
x+= moveRate;
}else if(direction.equals("NE")){
x+= moveRate;
y-= moveRate;
}
//System.out.println("Moving " + direction);
}