Anthill Game Framework

Tiny framework for creating Flash games.

Инструменты пользователя

Инструменты сайта


anthill:anttilemap

AntTileMap

Работа с тайловыми картами создает порой много лишних хлопот, особенно явно это чувствуется, когда уровень необходимо построить из тайлов таким образом, чтобы игрок не подозревал о их существовании вообще. Данный класс создан для того, чтобы максимально упростить работу с тайловыми картами. В первую очередь он был заточен на то, чтобы создавать уровни любых размеров из одного и более клипов. Работа разработчика заключается в том, чтобы нарисовать красивый уровень и отдать его на растерзание данному классу, а он уже позаботится о его растеризации и нарезании на тайлы.

Работа с данным классом происходит очень просто:

// Создаем экземпляр тайловой карты
var tileMap:AntTileMap = new AntTileMap();
// Устанавливаем размер по ширине и высоте
tileMap.setMapSize(10, 5);
// Устанавливаем размер тайла по ширине и высоте
tileMap.setTileSize(128, 128);
// Указываем клип, из которого необходимо создать тайловую карту
tileMap.addClip(MyGreatLevel_mc);
// Запускаем процесс кэширования (растеризацию и нарезание указанного клипа на тайлы)
tileMap.cacheClips();

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

tileMap.eventComplete.add(onTileMapComplete);
tileMap.eventProcess.add(onTileMapProcess);

private function onTileMapComplete():void
{
  trace("Caching is completed!");
}

private function onTileMapProcess(aPercent:Number):void
{
  trace("Caching..." + aPercent + "%");
}

Если есть необходимость создавать большие уровни — это тоже можно легко сделать, — просто разделите ваш уровень на несколько клипов, например MyGreatLevelPart1_mc и MyGreatLevelPart2_mc и добавьте их в очередь таким образом:

tileMap.setMapSize(200, 20);
tileMap.addClip(MyGreatLevelPart1_mc, new AntPoint(0, 0), new AntPoint(100, 20));
tileMap.addClip(MyGreatLevelPart2_mc, new AntPoint(100, 0), new AntPoint(200, 20));
tileMap.cacheClips();

Здесь дополнительно мы указываем область в клетках в которую будет записан данный клип. Как можно видеть из примера, первый клип будет растеризирован в тайлы с (0,0) по (100,20), а второй c (100,0) по (200,20) — то есть в итоге получается, что одну большую тайловую карту мы построили из двух клипов.

Если хочется создавать классические тайловые карты, где заранее нарисован тайлсет, и необходимо только задать свою разновидность для каждого тайла — это тоже можно легко сделать. Для этого сделайте из своего тайлсета обычный MovieClip, как обычную анимацию, разместив на каждом кадре клипа по одной разновидности тайла и добавьте его в глобальный кэш анимаций, а от туда уже добавьте его в тайловую карту:

AntG.cache.addClip(MyTileSet_mc);
AntG.cache.cacheClips();

...

var tileMap:AntTileMap = new AntTileMap();
tileMap.setMapSize(10, 10);
tileMap.initializeTiles();
tileMap.setTileSetFromCache("MyTileSet_mc");

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

tileMap.switchFrameByCoordinates(tilePosX, tilePosY, tileFrame);

Где tilePosX и tilePosY — это координаты нужного вам тайла в тайловой карте, а tileFrame — это тот кадр, который должен отображать данный тайл из тайлового сета.

Это основные задачи и возможности, которые выполняет класс AntTileMap, но так же не могу не отметить тот факт, что тайлы — это обычные AntActor, а тайловая карта унаследована от AntEntity, что в итоге дает возможность работать с картой, как с обычной группой актеров.

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


anthill/anttilemap.txt · Последние изменения: 11.05.2013 00:48 — Илья Уткин