Начальная точка для карты тайлов - PullRequest
0 голосов
/ 09 февраля 2012

Я должен начать работу над 2D-платформой на Java с использованием Java2D и пытаюсь найти способ создать мир.Я читал об этом в течение последних нескольких часов, и, насколько я могу судить, относительно эффективным способом является наличие текстового файла с «матрицей» значений в нем, который считывается программой вчтобы создать карту (хранится в 2D-массиве).

Теперь я планирую иметь несколько JComponents, которые отображают ImageIcons для различных текстур в мире;объект JComponent будет зависеть от символа в данном индексе массива.

  1. Есть ли что-то, что я мог упустить из виду?
  2. Будет ли эта схема работать с фоновым изображением, то есть когдасимвол, представляющий пробел, будет ли показана часть фона?

Извинения, если это кажется ленивым вопросом, могу вас заверить, что это не из-за лени.Я просто пытаюсь спланировать это перед тем, как взламывать код.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2013

Существует множество хороших движков для 2D-графики, доступных для Java. Вам лучше использовать один из них, чем пытаться заново изобрести колесо. (Совершенно независимо от всего остального они будут использовать графический процессор.

Вы должны легко найти тот, который делает то, что вам нужно.

0 голосов
/ 09 февраля 2012

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

Пример: 480x640 Файл изображения Canvas 128x16 (содержит 8 изображений мозаичного размера 16x16). Таким образом, в вашем файле имеется набор чисел (символов и т. Д.), Мы скажем 0-7 для 8 плиток изображения.Файл имеет номера 30x40, размещенные в сетке так же, как холст.Итак,

1 2 1 3 4 8 2 ... ...

И отображение кода заканчивается примерно так (не проверено, основано на документах )

Graphics g = //initialize graphics;
Image yourTileImage = //load your image;
for (int xpos = 0; xpos < maxX; xpos++)
    for (int ypos = 0; ; ypos < maxY; ypos++)
        int number = //get number from map file
        g.drawImage(Image yourTileImage,
            xpos * 16, ypos * 16, xpos * 16 + 15, ypos * 16 + 15,
            number*16, 0, number+15, 15,
            ImageObserver observer)

, который в основном сопоставляет число с вашим изображением плитки, затем помещает это изображение плитки в правильное место в координатах холста (x, y) * размера плитки.

...