Создание сервера для Российских онлайн ММО игр на PHP ч. 7 — Игровые локации (тайловые карты)

Продолжая рассказывать о своем пути создания ПО для догружаемого контента в играх в этой статье хотел бы остановится на игровых картах (локациях).

Для создания демонстрационной MMO RPG игры я выбрал самое простое как мне кажется - тайловые карты. Вся их графика разбита на квадраты из которых собирается сама карта - множество из квадратов повторяется (например земля, вода используют размноженные квадраты составляющие набор тайлов)

В интернете я нашел , что для работы с картами существует программа Tiled - она поддерживает изометрические (2.5D), гексогональные и ортогональные карты.

изометрические карты
изометрические карты
гексогональные карты
гексогональные карты
ортогональные карты
ортогональные карты

Мне понравилось что программа поддерживает выгрузку xml , которая может содержать непроходимые области, VFX эффекты анимации и инструменты благодаря которым можно делать автоподстановку (выравнивание) тайлов по заранее созданному алгоритму

пример xml фаила:

<?xml version="1.0" encoding="UTF-8"?> <map version="1.5" tiledversion="1.7.1" orientation="orthogonal" renderorder="right-down" width="100" height="100" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="4"> <tileset firstgid="1" name="tmw_desert_spacing" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8"> <image source="tmw_desert_spacing.png" trans="4affea" width="265" height="199"/> </tileset> <tileset firstgid="49" name="tmw_desert_spacing2" tilewidth="32" tileheight="32" spacing="1" margin="1" tilecount="48" columns="8"> <image source="tmw_desert_spacing.png" trans="4affea" width="265" height="199"/> <tile id="0"> <objectgroup draworder="index" id="2"> <object id="1" x="5.76013" y="7.63843" width="16.2786" height="16.9047"/> </objectgroup> </tile> </tileset> <layer id="1" name="Слой тайлов 1" width="100" height="100"> <data encoding="csv"> ... </data> </layer> <objectgroup id="3" name="Слой объектов 1"> <object id="1" gid="3221225473" x="105.5" y="66.5" width="32" height="32" rotation="90"/> <object id="2" gid="3221225503" x="204.639" y="72.6027" width="58.5" height="41" rotation="324.844"/> </objectgroup> </map>

Я придумал WEB приложение на PHP куда можно загружать файлы формата xml данной программы .

демо на сайте http://my-fantasy.ru
демо на сайте http://my-fantasy.ru

Каждый элемент карты представлял собой класс PHP (назовем их сущностями) с описанием входящих в него атрибутов и других вложенных сущностей. База данных при этом должна иметь одноименные сущностям таблицы и поля (вспоминается ORM от Doctrine).

корневая сущность - карта
корневая сущность - карта
вложенная в карту сущность - слой карты
вложенная в карту сущность - слой карты

Накидав алгоритм автоматического сохранения в БД и загрузки из бд структуры xml фала основанный на reflection, XMLReader , php attribute вся загрузка xml документа свелась к вызову одной строчки в кода в php вида:

(new Tiled\Xml\Map($id))->parse(file_get_contents('1.tmx'))->save();

В случае если будут добавляться сущности или меняться их поля достаточно просто добавить или изменить классы php папках.

После я воспользовался php библиотекой GD что бы собрать картинку из данных что хранились в БД и понял что это плохая идея т.к. php на это тратит огромное количество оперативной памяти .

В перспективе я думаю сделать аналог программы Tiled, но в виде браузерной версии с возможностью редактировать карты, экспортировать в Tiled и создавать свои игровые карты прямо в приложении (осталось подучить JavaScript) и напишу об этом новую статью. Вот пару примеров, что я нашел в интернете:

PS. Как я понял Tiled была создана в процессе разработки open source игры The Mana World карты которой с легкостью загрузились в web приложение

В моем профиле вы найдете ссылки на статьи о продолжении проекта http://mmogick.ru/

История:

12
Начать дискуссию