#java #2d #game-engine
#java #2d #игровой движок
Вопрос:
Я хочу создать свой собственный движок, но для этого я хочу полностью понять, как это сделать. Все, что мне нужно, это знать, как я могу отобразить сетку с помощью менеджера макетов с нулевым значением. Причина nil manager заключается в том, что для перемещения карты мне нужно убрать изображение с экрана, а затем прокрутить все в поле зрения.
Если есть более простой способ сделать это, не связанный с использованием готового движка, пожалуйста, дайте мне знать.
Спасибо.
Ответ №1:
Послушайте, я прошел путь абсолютного позиционирования в AWT / Swing. Это работает, и вы можете делать с ней практически все, что захотите, но… а) вам нужно будет немного научиться (начните со ссылки выше); и б) будьте готовы потянуть за волосы — вы не понимаете, как много делают менеджеры макета, пока не обойдетесь без них.
Похоже, у вас есть пример использования из учебника для GridLayout
, за исключением того, что вам нужно анимировать этот макет на экране. Если это так, то «более простой способ», безусловно, не заключается в том, чтобы полностью использовать абсолютное позиционирование. Используйте GridLayout
, чтобы разместить свой графический интерфейс в одном контейнере, а затем поместите этот контейнер в контейнер с абсолютным расположением и используйте SwingTimer
для анимации этого на экране, вместо того, чтобы позиционировать все это абсолютно. А еще лучше, используйте Timing Framework или другую библиотеку, созданную именно для этой цели.
Ответ №2:
Вот как я бы подошел к проблеме. Я не буду выписывать весь подробный код для вас, но вот основная идея.
- Загрузите свое изображение в вызываемое BufferedImage. Смотрите это:http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html.
- Создайте подкласс
JPanel
, называемыйMapPanel
-
Переопределите метод
MapPanel
paintComponent() следующим образом:protected void paintComponent(Graphics g) {
Graphics2D graphics = (Graphics2D) g.create();
graphics.drawImage(img /*This is what you loaded in Step 1*/, null, 0, 0);
}Это просто нарисует изображение на панели.
- Теперь вернитесь к своему графическому интерфейсу и создайте main
JPanel
с нулевым менеджером компоновки, как вы сказали. - Создайте простой массив размером 12×12 из
MapPanels
-
Выполните цикл по этому массиву, используя что-то вроде этого:
for (int i = 0; i < 12; i ) {
for (int j = 0; j < 12; j ) {
array[i][j] = new MapPanel();
array[i][j].setBounds(12 * i, 12 * j, 48, 48);
}
} -
Теперь добавьте все эти панели отображения в ваш основной нулевой макет
JPanel
. СоздайтеJFrame
и установите свой mainJPanel
в качестве панели содержимого. -
Готово!
Надеюсь, это помогло! 🙂 Если вы чего-то не понимаете в этом, не стесняйтесь спрашивать Google, прежде чем спрашивать здесь.
Редактировать:
Как сказал @drewmoore, абсолютное позиционирование утомительно. Если вы хотите использовать GridLayout
и фреймворк синхронизации, просто установите для своего основного JPanel
макета значение GridLayout
и удалите array[i][j].setBounds(12 * i, 12 * j, 48, 48);
часть с шага 6. После этого все готово.