Построение
карт из тайлов (1).
Автор
Владимир
Васильев
References:
The article based on the ideas by
David
Michael :
"Tile/Map-Based Game Techniques: Handling Terrain
Transitions"
Ivan Dyshlenko :
"Creation
map edit for strategy games like Warcraft"
Tile graphics was obtained from WarCraft II
screenshots.
Часть
1.
(расширенный вариант
англоязычной версии).
Новые
термины.
(1) Тайл
- от англ. tile - фрагмент, кусочек,
плитка. Здесь и далее - небольшая
картинка с изображением
участка местности - воды, леса,
камней и т.д. Далее термин тайл
будет также использоваться для
обозначения обобщённого
битовогого представления
графического образа. (Возможно,
сейчас это выглядит сложным, но я
уверен, что в нужном месте текста
Вы поймёте, о чём идёт речь, если
нет - напишите мне.)
Тип
поверхности - ВОДА,
ЗЕМЛЯ, ЛЕС, КАМНИ, БОЛОТА и т.д.
Введение.
Начиная работу над
редактором карты, прежде всего,
нужно определить те законы по
которым игровые объекты будут
взаимодействовать друг с другом в
создаваемом игровом мире, каким
образом они смогут располагаться
на игровом поле относительно друг
друга и относительно границ
игрового мира. Не все из правил
напрямую нужны для создании карты,
но ведь карта - не самоцель.
Созданной модели должен отвечать
спрайтовый движок, который может
с этой картой работать.
Модель
игрового мира.
В данной статье
рассматривается следующая модель:
1. Игровая карта собирается из тайлов.
2. Каждый тайл может
состоять не более чем из двух типов
поверхности.
3. Каждый тип поверхности
может граничить с одним или двумя
другими СТРОГО ОПРЕДЕЛЁННЫМИ типами
поверхности.
Данная модель позволит
существенно сократить количество
оригинальных тайлов, необходимых для создания карты.
Примем
следующий порядок
расположения типов
поверхности:
ВОДА - ЗЕМЛЯ -
ТРАВА - ЛЕС. (см. рис.1)
рис.1
Согласно нашим
правилам ВОДА может граничить
только с ЗЕМЛЁЙ а ЛЕС только с
ТРАВОЙ.
Новые
термины.
Для любого тайла, состоящего из
двух типов поверхностей, тип
поверхности, стоящей в принятом
ранее порядке
расположения левее, будем
называть младшим
типом , правее - старшим.
Аналогично
определяется "старшинство"
для двух любых выбранных типов
поверхностей.
Математическая
модель.
Теперь мы
подошли к самому интересному - как
перевести нашу модель на язык
чисел. Если мы представим, что
наша карта уже построена, (см. рис.2)
легко понять, что любой тайл
однозначно определяется его
ближайшими соседями.
Таких соседей 8.
Число 8 должно уже само по себе
внушать Вам оптимизм - можно
полностью описать тайл одним
байтом. Но впереди нас ждут ещё
более приятные совпадения. Из 8
соседей 4 граничат по углам и 4 по
сторонам выбранного тайла. 4 - это
полубайт, а к нему так же легко
получить доступ, как и к байту!
Итак,
тайл можно описать 8'ю
битами. Младшие 4
бита используем для
описания сторон, старшие
4 бита
для описания
вершин. (см. рис.3-4)
рис.2 |
рис.3 |
|
|
Если Вы
неуверенно себя чувствуете при
чтении слова "бит",
специально для вас подготовлена
демонстрационная программа
Bit manipulation demo.
рис.4 |
|
Таким образом, будет
логичным определить следующий
порядок в
соответствии с которым будут
проверяться ближайшие соседи
выбранного тайла и установить точно такое
же соответствие
между порядком следования битов и
нумерацией сторон и вершин. Порядок
Вы можете увидеть на рис.5
(слева), а соответствие
между порядком следования битов
и вершинами и сторонами любого
тайла на рис.5
(в центре).
Рассматриваемый тайл
выделен светло-зелёным, ближайшие
соседи светло-голубым. Отсчёт
начинаем с нуля т.к. в программе
будут использоваться
динамические массивы.
рис.5 : Direction and
checking bit correlation.
Следует заметить, что
для построенной
самосогласованной карты:
bit 0
равен bit 2
bit 1 равен bit
3
bit 2 равен bit
0
bit 3 равен bit 1
и т.д. ...- т.к. там должны быть
одинаковые типы поверхностей.
Как было определено
ранее, любой тайл может включать в
себя не более двух типов
поверхностей. При этом один тип
поверхности рассматривается
как младший тип (Low type),
другой - как старший
(Hi
type).
Старшему типу в
двоичном описании тайла будет
соответствовать 1 а младшему -
0.
Конструирование
наборов тайлов.
Новые
термины.
Кисть набора
или его название
определяется по старшему типу тайлов.
Благодаря пункту
3 нашей модели, необходимо всего
три набора тайлов для создания
карты с четырьмя типами
поверхности:
Набор1 для
перехода ВОДА - ЗЕМЛЯ (кисть
"земля" = 1)
Набор2 для перехода ЗЕМЛЯ -ТРАВА
(кисть "трава" = 2)
Набор3 для перехода ТРАВА -
ЛЕС (кисть "лес" = 3)
Так как все
наборы устроены одинаково,
рассмотрим некий обобщённый
набор БЕЛОЕ - ЧЁРНОЕ для
построения карты с двумя типами
поверхностей - белой и чёрной.
Аккуратно
расписав все возможные комбинации
расположения типов поверхностей
на границах тайлов мы обнаружим,
что стороны и углы а так же их
битовые представления можно
расположить в обычном порядке
следования двоичных чисел : 0000,0001,0010
и т.д....
рис.6 : Common
terrain transition bit model.
Более того, можно
уменьшить количество
оригинальных тайлов для набора, изменив
графическое
изображений тайлов. Заметьте, что
математическое представление
таких тайлов не изменяется!!!
Сравните рис.6
и рис.7.
рис.7 :
Reduced terrain transition bit model.
Ниже приведён реальный
набор ЗЕМЛЯ -ТРАВА, полученный по
изложенной выше методике.
рис.8 : Real
terrain tile set.
Copyright ©
2001 Владимир Васильев .
Никакая
часть данной статьи, включая
иллюстрации, ни в каких целях не
может быть воспроизведена в какой
бы то ни было форме и какими бы то
ни было средствами без
письменного разрешения автора.
|