2009-04-08 3 views
9

Я сейчас нахожусь в небольшом представлении RPG на большой высоте в духе классической серии Ultima. Мне нужен быстрый и грязный (более быстрый, чем грязный) способ проектирования больших карт - скажем, 1000 плиток х 1000 плиток, и мне нужна помощь, чтобы понять, как это сделать.Лучший способ построить карту игры

Я бы сказал, есть хорошие 50-60 различных типов плитки - леса, реки, равнины и т.д.

До сих пор, лучшее, что я мог придумать было

  • определить массив (или некоторую подобную структуру), чтобы удерживать две ключевые части информации - идентификатор местоположения/координаты и целое число от 1-60, определяющее, какой тип плитки он есть.

  • в приложении для редактирования растра, нарисуйте изображение 1000px x 1000px. Используя палитру из 50 разных цветов, я рисую свою карту - 1 пиксель соответствует 1 плитке. Скажем, для данной плитки для воды я нарисую группу пикселей в определенном оттенке синего. Сохранить как .gif или .png.

  • напишите некоторый процессор, который затем анализирует вышеупомянутый gif/jpg и анализирует его по пикселям. В зависимости от значения RGB пикселя он определяет тип плитки. Затем процессор обрабатывает некоторые подпрограммы, которые заполняют массив карт.

До сих пор я думаю, что должен быть более простой способ.

ответ

3

Try SourceForge: http://sourceforge.net/search/?type_of_search=soft&words=tile+editor

Некоторые из этих редакторов сэкономят к какому-то стандартному формату, который вы можете тянуть в свою игру, как вам нравится.

TileStudio будет даже выход заголовка/исходные файлы, которые могут быть собраны непосредственно в двигатель (не уверен, что ваши потребности)

2

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

Другой вариант может заключаться в том, чтобы написать программу, которая позволит вам просто определить местоположение основных функций, а программа генератора заполнит остальные. (Например: река, идущая от x1, y1 до x2, y2. «Большой» форвард с центром в x, y и т. Д.). Это может позволить вам определить большую карту только из меньшего файла географических объектов. Подумайте об этом как о том, как делать векторный рисунок, а не указывать каждый последний пиксель в растре. :-)

11

Необходимо ли использовать плитки? Посмотрите на сайте Daniel Кука, Lost Garden, он не только даст вам некоторые вкусные бесплатно художественные работы, но он обсуждает появление произвольного размещения изображений в играх, а плитки:

«ОДНАЖДЫ, вам нужно использовать маленькие квадратные плитки для всего. в настоящее время нет реальной необходимости сделать плитку на основе 2D-движок. с произвольных изображениями с полным альфа и много скорости заполнения, вы можете положить вместе игру, как наклейка. Опустите свою графику на произвольные позиции и слой, как сумасшедший. Игры, подобные Aquaria отлично смотрятся и плитки нигде не видно."

есть также ссылка там на step-by-step instructions на создание редактора в игре, основанной на IndieLib.

+1

+1 ибо из коробки мышление! Я буду здесь всю ночь! –

1

Другим вариантом было бы генерировать (пиксель) карты или непосредственно игра на карте. Это, конечно, зависит от размера вашего мира, и если у вас есть много конкретных ресурсов (город на данный момент, шахта в этом пункте ...)

На сайте было много статей по этому вопросу (например, RogueBassin)

Они также говорят о структуре данных, чтобы иметь возможность большего изменения (например, иметь базовое изображение и случайным образом добавлять несколько (маленьких) изображений «бахромы» при определении представления в вашем массиве карт. Например, чтобы добавить небольшую скалу в траву). Другие эффекты, как кажется в ultima V, где некоторые элементы крыши стали прозрачными, когда вы проходите мимо, также базируются в этой структуре.

Мы обнаружили, что наличие изображения (в нашем случае, набора изображений) является простым, поскольку вы можете обновить внешний вид (не более прямоугольного леса!), Когда у вас есть время, и сосредоточьтесь на конкретном месте поиска ,

рассматривает

Гийом

2

Я рекомендовал бы имея информацию о положении быть информацией индексирования для вашей структуры данных для хранения, а не то, что вы ищете в нем. И.Е.

int get_terrain_type(int x, int y) { 
    return terrain[x][y]; 
} 

(Не совсем уверен, что это не то, что вы имели в виду, но я думал, что я положил его там.)

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