2015-04-18 5 views
1

Я пытаюсь добавить изображение .png в окно моего холста, однако у меня возникают некоторые проблемы. Предположим, что я добавляю в окно различные типы объектов. Существует класс Pacman, который расширяет класс GameObject. Тем не менее, мой pacman в настоящее время является прямоугольником, и я хочу заменить этот прямоугольник изображением Pacman. Я пробовал 10 разных кодов, но вам нужно расширить либо холст, либо JFrame. К сожалению, я не могу этого сделать, так как я уже расширил класс Pacman с помощью класса GameObject.Добавление изображения в окно холста

Я новичок в программировании объектов, но есть ли способ добавить изображение в окно?

+0

Тогда нет Pacman расширяет GameObject или делает GameObject интерфейсом и реализует его. –

+1

'Графика # drawImage'? – MadProgrammer

+0

Да, я пробовал работать с Graphics.drawImage, но я не знаю, что делать с параметром ImageObserver –

ответ

4

Рассмотрите возможность повторной разработки вашей 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 и свинг, пожалуйста, проверьте:

+0

Я очень ценю ваше усилие, но я очень новичок в программировании на Java и объектах, и я не уверен, насколько я понял –

Смежные вопросы