@zevilcube

Как в Java сделать так, чтоб keyPressed одной клавиши не прерывал keyPressed другой?

Некоторые куски кода опущены для краткости.

У меня есть JFrame для будущей игры. Добавляю к нему KeyListener:
window.addKeyListener(new KeyListener_WASD());

Класс с KeyListener:
public class KeyListener_WASD implements KeyListener {
    private int horizontal = 0; //переменная "на сколько нужно передвинуть объект горизонтально"
    private int vertical = 0; //переменная "на сколько нужно передвинуть объект вертикально", пока что не используется.
    private HashMap <Integer, Boolean> pba = new HashMap <> (); // int - код клавиши, bool - нажата ли она

    KeyListener_WASD () {
        pba.put(KeyEvent.VK_W, false);
        pba.put(KeyEvent.VK_A, false);
        pba.put(KeyEvent.VK_S, false);
        pba.put(KeyEvent.VK_D, false);
        pba.put(KeyEvent.VK_SPACE, false);
    }

    public void keyPressed(KeyEvent e) {
        GameObject movingObject = Game.getCurrentMap().getObjects().get(0);
        pba.put(e.getKeyCode(), true);

        if (pba.get(KeyEvent.VK_A)) {
            horizontal = -movingObject.speed;
        }
        if (pba.get(KeyEvent.VK_D)) {
            horizontal = movingObject.speed;
        }

        if (pba.get(KeyEvent.VK_SPACE)) {
            movingObject.jump();
        }

        movingObject.move(horizontal, vertical);
    }
    public void keyReleased(KeyEvent e) {
        pba.put(e.getKeyCode(), false);

        if (e.getKeyCode() == KeyEvent.VK_A || e.getKeyCode() == KeyEvent.VK_D) {
            horizontal = 0;
        }
    }
    public void keyTyped(KeyEvent e) {
    }
}


Собственно, в чём проблема:
При зажатии A или D объект с игровой карты должен двигаться влево или вправо соответственно. НО! Если в то время, когда одна из этих клавиш нажата, нажать любую другую клавишу, то объект двигаться перестаёт. Совсем.
Мне кажется, что keyPressed (а может и keyReleased), срабатывающий от одной клавиши, прерывает действие keyPressed другой клавиши.

Как мне решить проблему? Помогите, пожалуйста.

P.S. Возможно, присутствует говнокод или я неверно излагаю мысль.
  • Вопрос задан
  • 34 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Unitarius Москва
от 130 000 до 180 000 руб.
XCritical Software Санкт-Петербург
от 150 000 до 220 000 руб.
До 170 000 руб.
15 сент. 2019, в 09:25
15000 руб./за проект
15 сент. 2019, в 09:17
25000 руб./за проект
15 сент. 2019, в 09:14
100000 руб./за проект