Я создаю простую игру с Java Swing. У меня проблема - KeyListener
кажется немного прерывистым/медленным. Персонаж перемещается с помощью этого кода:
// player control
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
switch(key){
case(KeyEvent.VK_LEFT): dx = -speed; break;
case(KeyEvent.VK_RIGHT): dx = speed; break;
case(KeyEvent.VK_UP): dy = -speed; break;
case(KeyEvent.VK_DOWN): dy = speed; break;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key){
case(KeyEvent.VK_LEFT): dx = 0; break;
case(KeyEvent.VK_RIGHT): dx = 0; break;
case(KeyEvent.VK_UP): dy = 0; break;
case(KeyEvent.VK_DOWN): dy = 0; break;
}
}
// this method is performed each time before redrawing the screen
public void step() {
x += dx;
y += dy;
}
Большую часть времени все нормально, но иногда персонаж ненадолго останавливается, прежде чем реагировать на клавиатуру. Как сделать ввод с клавиатуры более плавным?
KeyBinding
), для лучшей помощи скорее отредактируйте свой вопрос с помощью SSCCE - person mKorbel   schedule 05.06.2012KeyListener
. Мне также было интересно, можно ли «выйти» из события KeyPressed после его запуска, чтобы оно не повторялось - person YemSalat   schedule 05.06.2012keyReleased
и сбросит xSpeed до 0. Теперь слушатель ждет срабатывания следующейkeyPressed
, так как мы все еще удерживаем левую клавишу. - person YemSalat   schedule 05.06.2012KeyListener
такой же как иKeyBindings
, но тут сходство уже заканчивается, все дальше проFocus
иFocusSubsystem
, сKeyBindings
не важно есть или нет, этот вопрос не решить никогда, сKeyListener
является наиболее важным, серьезной проблемой и зависит от..., вплоть до того, что вы в том числе отредактируете свой пост с помощью SSCCE, чтобы лучше проверить сообщение с помощью мыши на keylistener - person mKorbel   schedule 05.06.2012KeyListener
, однако я нашел другое решение - просто отслеживать какие клавиши нажаты в данный момент и проверять их на каждомkeyReleased()
Так что нам не нужно сбрасывать скорость персонажа до нуля, когда, например, правая клавиша отпущена, но пользователь все еще держит левую клавишу. Я обновлю свой пост, чтобы показать решение. - person YemSalat   schedule 05.06.2012KeyListener
, но, как я уже сказал, проверка того, какие клавиши нажаты, решает проблему. - person YemSalat   schedule 05.06.2012