ключевой слушатель с acm.graphics

Несколько связано с этим вопросом.

У меня есть игра, созданная в графической библиотеке ACM. Я хочу иметь возможность приостановить игру нажатием клавиши клавиша P. Однако я просмотрел документацию, и, кажется, там кратко упоминаются ключевые прослушиватели, но нет реальных примеров их использования в этом контексте (если я что-то не пропустил).

Я не хочу использовать консоль или диалоговое окно, поскольку я не хочу вводить данные с клавиатуры, я просто хочу иметь возможность включать и выключать метод паузы с помощью клавиша P в моем основном игровом цикле. Это возможно?


person Dawn    schedule 16.04.2019    source источник
comment
Почему KeyListener должен отличаться от любой графики ACM ?? Вы искали множество ссылок на KeyListener???   -  person gpasch    schedule 16.04.2019


Ответы (1)


Вам нужен класс, который является подклассом Program ACM, чтобы добавить ключевой прослушиватель. Во-вторых, вам нужен класс, реализующий KeyListener (это может быть тот же класс), а затем выполнять свой код в KeyListener#keyPressed. Вы можете получить код нажатой клавиши через KeyEvent.getKeyCode и проверить, соответствует ли он нужной клавише (в данном случае клавише P).

Следующий пример иллюстрирует, как это может работать. Он не проверял это, но это должно сработать.

public class KeyListenerExample extends GraphicsProgram {

    @Override
    public void run() {
        addKeyListeners(new MyKeyListener());
    }

    private class MyKeyListener implements KeyListener {

        @Override
        public void keyPressed(KeyEvent e) {
            int keyCode = e.getKeyCode();
            if (keyCode == KeyEvent.VK_P) {
                System.out.println("Key 'P' has been pressed!");
            }
        }

        @Override
        public void keyReleased(KeyEvent e) { /* Empty body */ }

        @Override
        public void keyTyped(KeyEvent e) { /* Empty body */ }

    }
}

Было бы полезно, если бы вы могли предоставить минимальный, полный и проверяемый пример для вашего вопроса (особенно для дальнейших вопросов).

person Nordic88    schedule 16.04.2019