Рассмотрите возможность повторной разработки вашей GUI-программы в режиме MVC (model-view-control), где ключ заключается в том, что модель (логическое представление вашей программы) отличается от и не знает представления (визуальное представление программы). Таким образом, ваш класс модели Pacman может расширить класс модели GameObject, в то время как визуальное представление Pacman может быть JLabel, которое содержит ваше изображение pacman в ImageIcon.
Редактировать: либо это, либо как состояние MadProgrammer, визуальное представление рисуется на главной JPanel игры как спрайт в своем методе paintComponent(Graphics g)
.
Ключевым моментом здесь является то, что ваше логическое представление игры - в основном местоположение, движение и взаимодействие действующих лиц, таких как Pac Man, враги, «еда», силовые биты, границы лабиринта , кодируется без учета графического интерфейса пользователя, изображений или пользовательских взаимодействий. Эта часть кода не будет использовать библиотеки GUI, такие как Swing или AWT, не будет использовать KeyListeners или привязки клавиш. У этого был бы игровой цикл, который и логика, которая переместила бы элементы, не управляемые пользователем, это проверит для Pac Man и вражеских касаний, у него будет код для состояний Pac-Man - нормальный и уполномоченный - и логика для чего когда Pac-Man касается врага в зависимости от состояния Pac-Man. У него были бы методы, позволяющие другому классу перемещать Pac-Man, например moveRight()
, moveLeft()
, moveUp()
и moveDown()
.
GUI отобразит лабиринт и актеров в зависимости от их положения в модели. GUI будет уведомлен слушателями об изменениях в состоянии модели, а затем перекрасит себя и новую позицию актеров. У него будут слушатели, которые будут слушать взаимодействие с пользователем, а затем передадут эту информацию контроллеру, который затем изменит состояние модели. Например, привязки клавиш могут уведомить класс управления, который пользователь нажимает на стрелку вверх, а затем элемент управления вызовет метод модели moveUp()
, чтобы переместить Pac-Man вверх, если никаких препятствий это не произошло.
Более подробную информацию о M-V-C и свинг, пожалуйста, проверьте:
Тогда нет Pacman расширяет GameObject или делает GameObject интерфейсом и реализует его. –
'Графика # drawImage'? – MadProgrammer
Да, я пробовал работать с Graphics.drawImage, но я не знаю, что делать с параметром ImageObserver –