Как мне отобразить сетку 12X12 из изображений 48X48 пикселей в окне в Java

#java #2d #game-engine

#java #2d #игровой движок

Вопрос:

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

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

Спасибо.

Ответ №1:

Послушайте, я прошел путь абсолютного позиционирования в AWT / Swing. Это работает, и вы можете делать с ней практически все, что захотите, но… а) вам нужно будет немного научиться (начните со ссылки выше); и б) будьте готовы потянуть за волосы — вы не понимаете, как много делают менеджеры макета, пока не обойдетесь без них.

Похоже, у вас есть пример использования из учебника для GridLayout , за исключением того, что вам нужно анимировать этот макет на экране. Если это так, то «более простой способ», безусловно, не заключается в том, чтобы полностью использовать абсолютное позиционирование. Используйте GridLayout , чтобы разместить свой графический интерфейс в одном контейнере, а затем поместите этот контейнер в контейнер с абсолютным расположением и используйте SwingTimer для анимации этого на экране, вместо того, чтобы позиционировать все это абсолютно. А еще лучше, используйте Timing Framework или другую библиотеку, созданную именно для этой цели.

Ответ №2:

Вот как я бы подошел к проблеме. Я не буду выписывать весь подробный код для вас, но вот основная идея.

  1. Загрузите свое изображение в вызываемое BufferedImage. Смотрите это:http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html.
  2. Создайте подкласс JPanel , называемый MapPanel
  3. Переопределите метод 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);
    }

    Это просто нарисует изображение на панели.

  4. Теперь вернитесь к своему графическому интерфейсу и создайте main JPanel с нулевым менеджером компоновки, как вы сказали.
  5. Создайте простой массив размером 12×12 из MapPanels
  6. Выполните цикл по этому массиву, используя что-то вроде этого:

    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);
    }
    }

  7. Теперь добавьте все эти панели отображения в ваш основной нулевой макет JPanel . Создайте JFrame и установите свой main JPanel в качестве панели содержимого.

  8. Готово!

Надеюсь, это помогло! 🙂 Если вы чего-то не понимаете в этом, не стесняйтесь спрашивать Google, прежде чем спрашивать здесь.

Редактировать:

Как сказал @drewmoore, абсолютное позиционирование утомительно. Если вы хотите использовать GridLayout и фреймворк синхронизации, просто установите для своего основного JPanel макета значение GridLayout и удалите array[i][j].setBounds(12 * i, 12 * j, 48, 48); часть с шага 6. После этого все готово.