Я хочу использовать привязки клавиш, но анимация, которую он производит, плохая - PullRequest
0 голосов
/ 24 марта 2019

Я пытаюсь сделать эту игру, в которой значок изображения перемещается по экрану в зависимости от ввода с клавиш со стрелками. Я начал с использования Key Listeners, который работал нормально, но чтобы избежать будущих проблем с фокусировкой и удобством сопровождения, я решил попробовать связывание клавиш, потому что каждый рекомендует использовать связывание клавиш поверх слушателей. Однако я обнаружил, что прослушиватели клавиш обеспечивают плавное непрерывное движение, а привязки клавиш создают неровную анимацию, в которой можно увидеть, как спрайт мгновенно перемещается из одной позиции в заданный интервал пикселей в некотором направлении. Я делаю что-то неправильно? Стоит ли просто прислушиваться к слушателям?

Мой код для привязки клавиш (только для перемещения вправо):

im = this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0, false), "right");

    am = this.getActionMap();
    am.put("right", new AbstractAction(){
        public void actionPerformed(ActionEvent e)
        {
            if(x != 440)
            {
                x+=1;
                repaint();
            }
        }
    });
}

1 Ответ

0 голосов
/ 24 марта 2019

Связки клавиш IIRC ведут себя так же, как при вводе в текстовое поле. В частности, я имею в виду, что если вы удерживаете кнопку (в данном случае клавишу со стрелкой вправо), она отправит нажатие клавиши один раз, а через секунду или две начнется быстрая отправка нажатия клавиши. Вот почему вы получите прерывистое движение, игровой цикл запускается чаще, чем называется привязка.

Вот почему лучше опрашивать ключи с помощью прослушивателя каждый раз, когда запускается основной цикл, потому что тогда анимация будет только такой прерывистой, как сам цикл. И если этот цикл становится прерывистым, игра просто медленно работает в полном объеме.

...