Создание сервера для Российских онлайн ММО игр на PHP ч. 7 — Игровые локации (тайловые карты)
Продолжая рассказывать о своем пути создания ПО для догружаемого контента в играх в этой статье хотел бы остановится на игровых картах (локациях).
Для создания демонстрационной MMO RPG игры я выбрал самое простое как мне кажется - тайловые карты. Вся их графика разбита на квадраты из которых собирается сама карта - множество из квадратов повторяется (например земля, вода используют размноженные квадраты составляющие набор тайлов)
В интернете я нашел , что для работы с картами существует программа Tiled - она поддерживает изометрические (2.5D), гексогональные и ортогональные карты.
Мне понравилось что программа поддерживает выгрузку xml , которая может содержать непроходимые области, VFX эффекты анимации и инструменты благодаря которым можно делать автоподстановку (выравнивание) тайлов по заранее созданному алгоритму
пример xml фаила:
Я придумал WEB приложение на PHP куда можно загружать файлы формата xml данной программы .
Каждый элемент карты представлял собой класс PHP (назовем их сущностями) с описанием входящих в него атрибутов и других вложенных сущностей. База данных при этом должна иметь одноименные сущностям таблицы и поля (вспоминается ORM от Doctrine).
Накидав алгоритм автоматического сохранения в БД и загрузки из бд структуры xml фала основанный на reflection, XMLReader , php attribute вся загрузка xml документа свелась к вызову одной строчки в кода в php вида:
В случае если будут добавляться сущности или меняться их поля достаточно просто добавить или изменить классы php папках.
После я воспользовался php библиотекой GD что бы собрать картинку из данных что хранились в БД и понял что это плохая идея т.к. php на это тратит огромное количество оперативной памяти .
В перспективе я думаю сделать аналог программы Tiled, но в виде браузерной версии с возможностью редактировать карты, экспортировать в Tiled и создавать свои игровые карты прямо в приложении (осталось подучить JavaScript) и напишу об этом новую статью. Вот пару примеров, что я нашел в интернете:
PS. Как я понял Tiled была создана в процессе разработки open source игры The Mana World карты которой с легкостью загрузились в web приложение
В моем профиле вы найдете ссылки на статьи о продолжении проекта http://mmogick.ru/
История:
- Введение
- Масштабируемость и асинхронность
- WebSocket
- Redis
- LUA и JavaScript
- Выбор технологий, протокола и архитектурный шаблон Entity Component System
- Игровые локации (тайловые карты)
- Клиентская часть на Unity
- Игровые серверные механики
- Открытый бесшовный мир в 2D игре
- FPS, Ping, паузы между командами, интерполяция и экстраполяция
- Очереди и параллельное программирование на CPU
- Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура
- Сетевая карта и задержка кадра (Latency frame) по RFC 2544 (1242)
- Создание сервера для онлайн ММО игр на PHP
- Готовое MVP сервиса 2D MMO RPG игр (realtime)