2015-06-01 2 views
1

Я симулирую Супермен, летающий на Яве.Ключ события стрелка в Java

Как я могу сделать событие, которое считает стрелки вправо и влево?

Я создал событие каждой стрелки, как так:

public void keyPressed(KeyEvent e) 
{ 
int KeyCode=e.getKeyCode(); 

switch(KeyCode) 
{ 
    case KeyEvent.VK_LEFT: 
     supermanleft.moveLeft(); 
     break; 
    case KeyEvent.VK_RIGHT: 
     supermanfly.moveRight(); 
     break; 
    case KeyEvent.VK_UP: 
     superman.moveUp(); 
     break; 
    case KeyEvent.VK_DOWN: 
     superman.moveDown(); 
     break; 
} 
} 

Когда я нажимаю две стрелы одновременно, Супермен возвращается.

+0

Должно ли оно идти по диагонали или нет? Если нет, добавьте логический флаг. –

ответ

0

Когда нажаты обе клавиши, каждый вызовет keyPressed. Вы можете сохранить набор нажатых клавиш, а затем посмотреть, есть ли две нажатые клавиши:

private Set<Character> pressed = new HashSet<Character>(); 

public synchronized void keyPressed(KeyEvent e) { 

    pressed.add(e.getKeyChar()); 

    if (pressed.size() > 1) { 
     //check if pressed contains what you want it to contain 
    } else { 
     //only one key is pressed - act as normal 
    } 
} 

public synchronized void keyReleased(KeyEvent e) { 
    //don't forget to remove when released: 
    pressed.remove(e.getKeyChar()); 
} 

Надеюсь, это поможет.

+0

В чем смысл добавления 'synchronized' в методы? Кроме того, 'getKeyChar()' следует использовать только для событий «KEY_TYPED». Когда вы хотите отслеживать, какие клавиши в настоящее время нажаты, вы должны использовать 'getKeyCode()' для запроса фактического * ключа *, а не * символа *. – Holger

Смежные вопросы