Индустрия разработки браузерных игр переживает интереснейший этап. На рынок вышел целый ворох новых технологий, а готовых проектов практически нет. Именно поэтому пока никто не знает, как правильно делать такие игры. Плюсы и минусы каждой из технологий не очевидны и каждый разработчик одинок на своем минном поле.Мы находимся в том же положении, что и другие разработчики и даже награда от Mozilla, являющаяся сигналом о том, что с технологиями все нормально, не дает нам расслабиться. До сих пор половина нареканий от пользователей связана с производительностью.
Сегодня я приоткрою завесу над устройством игры, чтобы будущие поколения знали как нужно, а возможно и как не нужно делать игры.
И так, на стороне клиента используется JavaScript усиленный библиотекой MooTools. Интерфейс построен на JxLib, а для отрисовки мира используется SVG и библиотека Raphael.
Отдельно хотелось бы упомянуть эффекты, технология каждого из которых подбирается индивидуально. Это может быть canvas, может быть css-спрайт, а может быть и SVG. Каждый вариант имеет свои плюсы и минусы. Постоянно приходится балансировать между трудоемкостью, размером графики и производительностью.
На другой стороне игру обслуживает сложная платформа написанная на perl. Это и само приложение на Catalyst и демон жизни на событийной машине AnyEvent, и comet-сервер Meteor. В качестве базы данных используется MySQL, а для быстрого кэша — memcached.

Всю платформу надежно закрывает nginx, который не только проксирует запросы и поддерживает постоянное подключение игроков к серверу, но и отвечает за генерацию некоторых изображений. Про генерацию кораблей я уже рассказывал, но это только малая часть и в будущем я постараюсь подробнее на этом остановиться.
За кадром останутся десятки околоигровых генераторов, апдейтеров и анализаторов, которые делают многое для нас. Чего стоит хотябы скрипт, создающий звездные системы используя современные астрофизические законы.
Выбор именно такого стэка обусловлен личными предпочтениями и он практически не изменился с самого начала проекта. Добавилась лишь библиотека для работы с SVG, хотя в будущем я искренне желаю избавиться от Raphael и при встрече с автором выровнять ему руки.
Кроме этого, в перспективе я планирую частично или полностью перейти на MongoDB. По тестам которые я раньше публиковал, именно эта БД лучше всего подходит для онлайн-игры: хорошо держит большое количество апдейтов и имеет достаточную стабильность.
Каждый элемент этой системы связан с другими и система не может работать при отсутствии хотя бы одного из них. Не мудрено, что на то, чтобы запустить игру на боевом сервере мне пришлось потратить почти неделю времени на настройку. И это при том, что я точно знал, что нужно делать!
Если вдруг кто-то вам скажет, что игры — это просто, то вы можете смело плюнуть ему в лицо ;)
836 просмотров
9 комментариев