Какие контейнеры / графические компоненты использовать в простой игре Java Swing? - PullRequest
2 голосов
/ 03 апреля 2010

Я создаю простую лабиринтную игру с Java + Swing. Игра рисует случайный лабиринт на экране, помещает фигуру в центр, и игрок должен найти выход, перемещая фигуру с помощью клавиш со стрелками. На данный момент я использую простой фон и рисую стены лабиринта с помощью Graphics.drawLine (). У меня есть собственное изображение рисунка в файле .gif, которое я загружаю как объект BufferedImage.

Однако я хочу, чтобы игрок видел только часть лабиринта за раз, и экран должен следовать за фигурой в игре, когда игрок перемещается. Я планирую сделать это, создав объект Image всего лабиринта при его создании, а затем «обрезав» квадрат вокруг текущей позиции фигуры и отобразив его с помощью Graphics.drawImage (). Впрочем, я новичок в Swing и не могу понять, как нарисовать фигуру в разных позициях «над» лабиринтом, не перерисовывая все это. Какой контейнер / компонент следует использовать для лабиринта, а затем для рисунка, чтобы достичь этого?

Ответы [ 3 ]

3 голосов
/ 03 апреля 2010

и я не могу понять, как нарисовать фигуру в разных положениях "над" лабиринтом, не перерисовывая все это целиком.

Используйте JLabel, содержащий значок.Затем вы просто используете label.setLocation () для перемещения изображения.Swing достаточно умен, чтобы перекрасить старую область (там, где было изображение), а затем нарисовать изображение в новом месте.

Вы можете сделать это с помощью одной JPanel.Ваша индивидуальная роспись панели раскрасит лабиринт.Метка, которая добавляется как дочерний компонент, будет нарисована поверх лабиринта.

Проверьте последнюю запись этой публикации , которая содержит интересный подход для построения лабиринта и еготакже поддерживает прокрутку лабиринта при движении игрока.

2 голосов
/ 03 апреля 2010

Я думаю, что стеклянная панель - это тот компонент, который вы ищете: это своего рода стекло, помещенное на раму. Все, что вы нарисуете, покроет то, что позади ... так что вы можете легко достичь эффекта, не заботясь об отсечении исходного изображения .. см. здесь !

1 голос
/ 03 апреля 2010

Вы можете посмотреть на JLayeredPane, рассмотренное в Как использовать многоуровневые панели и в этом вопросе .

...