Rambler's Top100

 GDsW - Game Developer's World    

.: Введение в тайлы :.


Введение в тайлы


Designed and maintained by Lennart Steinke 
перевод - Aidamir Taimasukov aidamir@chat.ru


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

На растровом уровне, каждый пиксел - это индекс к соответствующему цвету в палитре. На уровне тайловой карты, каждый тайл из карты - индекс к соответствующей клетке в вашем архиве тайлов (который может быть массивом или списком связей). Это подобно текстовым режимам, в которых, помещая одиночный байт (или фактически два байта, один для атрибута) выводится символ на экран. 

Тайл непосредственно - только растр определенного размера. Основная идея состоит в том, чтобы сделать дисплей более абстрактным. Вместо экранной памяти фиксированного размера, Вы получаете Тайловую Карту виртуального размера, которого Вы хотите.


Отлично, что с этим делать?
---------------------------
Помните старую игру "pacman"? Это - лабиринт, заполненный пирогами, игрок должен есть их избегая того, чтобы быть съеденным четырьмя призраками, которые преследуют его. Вы могли бы реализовать графику, рисуя лабиринт графическим редактором, но затем вы столкнетесь с проблемами, как только Вы захотите проверять столкновения со стенками, пирогами и всем другим в лабиринте. 

Вы могли бы предложить такой путь использования ТК: лабиринт построен из нескольких блоков (прямые строки и углы), пироги всегда одинаковые, и они одинаково возможно ограничивают движение спрайтов при перемещении из клетки в клетку. Проверка стенок и пирогов проста: Только проверьте ТК, если индекс указывает на стенку, или пирог.

Jump'n'Run игры - также отличное место, чтобы использовать тайлы: целый мир состоит из некоторых элементов (платформы, стенки, многозвенные схемы, телепортеры и т.д.), использование тайлов решительно уменьшит необходимый объем памяти. И еще раз, проверка столкновений со стенками - намного проще чем на растровом уровне.


Вывод на дисплей
----------------
Сперва, зададим некоторые константы: 

#define TILE_WIDTH 16
#define TILE_HEIGHT 16
#define TILE_COUNT_X SCREEN_WIDTH / TILE_WIDTH
#define TILE_COUNT_Y SCREEN_HEIGHT / TILE_HEIGHT

Выбран размер 16x16 для тайлов, но Вы могли бы также использовать 10x10, 32x32, 20x15, 32x10 и т.д. Размер тайлов зависит только от того, что Вы хотите делать с ними. Следующие две константы содержат число тайлов, которые показывают полное число строк и колонок видимых на экране. Вывод видимой части карты на экран прост:

bitmap *tile[100]; /* 100 tiles */
unsigned char map[MAP_WIDTH][MAP_HEIGHT]; /* The map */

for (y=0; y < TILE_COUNT_Y; y++)
for (x=0; x < TILE_COUNT_X; x++)
blit_tile(x*TILE_WIDTH, y*TILE_WIDTH, tile[map[x][y]]);

Blit_tile (x, y, tile *n) вывод тайла n в позицию (x, y) .. Ваша gfx lib должна иметь функцию вывода прямоугольных областей на экран. 


Скроллинг
---------
Чтобы получить гладкую прокрутку tilebased- мира, нужны дополнительные усилия . Прежде всего мы нуждаемся в двойном буфере (это вообще не необходимо, но это делает прокрутку мира намного проще -и быстрее) с шириной screensize + 2*tile_width и высотой screenheight + 2*tile_height. 

lennart_steinke@bigfoot.com
 

 



главная ] Общеигровые статьи на GDsW ] DirectX ] Статьи по графике ] Статьи по AI ] Юмор ]


.: Введение в тайлы :.

Rambler's Top100 Рейтинг@Mail.ru List.ru - каталог ресурсов интернет Белорусский каталог BelResource

Copyright IRsoft, web-master Keeper. All rights reserved!

Хостинг от uCoz