Как стать автором
Обновить

War of Machines: создание игры для iOS

Время на прочтение2 мин
Количество просмотров26K
В этой статье я хочу поделиться с вами своим практическим опытом разработки игры для iOS на основе open-source компонентов. Мы пройдемся по техническим решениям, которые были приняты во время разработки игры.


Спецификация


Первым делом я сел делать спецификацию для игры. Решил, что не напишу и строчки кода, пока не будет готова спецификация. Конечно в ходе разработки она менялась, но не значительно. Спецификация очень помогла не отойти от первоначальной задумки. По спецификациям рекомендую почитать статьи Джоэл Спольски: http://www.joelonsoftware.com/articles/fog0000000036.html

Краткое описание игры


Одной из задумок игры было создать разнообразный геймплэй. Основной геймплэй представляет собой RTS:


А вот в бонусах юзеру предстоит пострелять в аркадном стиле и даже поучаствовать в поединках один на один:


За каждую стадию юзер получает нового юнита или новую способность. Первые стадии идут обучающие, а вот далее юзеру надо выстраивать свою стратегию, чтоб пройти уровень.

Графический движок


Изначально было принято решение писать игру на С++, так как уже были готовы ряд заготовок и не хотелось тратить время на изучение нового языка. А также не хотелось переходить c Visual Studio на XCode.
В качестве движка я рассматривал два варианта: Ogre3D и Irrlicht. Оба движка очень хороши. API у каждого движка понятный и разобраться с основными возможностями не составило труда. Irrlicht имеет меньшей размер, но ветка OGL-ES ещё не официальная. А вот у Ogre3D есть официальная ветка. Всё же выбор пал на Irrlicht, потому что проведённые тесты по скорости дали результат лучше, чем у Ogre3D.
Irrlicht предоставил мне следующий функционал:
• Рендеринг c OGL-ES.
• Загрузка моделей из файлов (я использовал формат DirectX)
• Билборды
• Анимированные модели
У Irrlicht есть свой XML парсер, но его использовать не рекомендую, потому что он мало функционален. Лучше использовать rapidxml или pugixml
Так же в архитектуре Irrlicht предусмотрена возможность дописывать расширения без изменения кода движка.

Скриптовый движок


Первый движок, который я рассмотрел был tiny-js. После ряда тестов выяснилось, что он слишком медленный и никак не подходит для мобильной игры.
Далее я начал рассматривать LUA и AngelScript. По скорости оба движка давали хорошие результаты. AngelScript имеет С-подобный синтаксис, а также возможность легко привязывать C++, что и сыграло основную роль в выборе скриптового движка.
Пример привязки новой функции выглядит следующим образом:
_engine->RegisterGlobalFunction("void MyFunc()", asFUNCTION(MyFunc), asCALL_CDECL);
void MyFunc()
{
// Do some work
}


AI



Архитектуру AI для своего проекта я выбрал «behavior tree». Данная архитектура позволяет создавать сложные системы поведения и не заботиться о всевозможных переходах из состояния в состояния. Упрощённый пример такой архитектуры:

Добавление нового поведения в данной архитектуре очень простое: достаточно добавить новое поведение в конкретный узел дерева и всё.
Более подробно о «behavior tree» можно узнать из статьи «Introduction to Behavior Trees».

Разработка


Весь код писался на Visual Studio. В Windows я использовал основную ветку Irrlicht, вместо тачев были клики мыши. Раз в неделю я компилировал текущую версию на XCode и тестировал на девайсе.
В ходе исправления утечек памяти очень сильно помогла библиотека VLD. Данная библиотека показывает информацию по утечке памяти с информацией о коде:


Результат


Небольшое видео того, что получилось:
Теги:
Хабы:
Всего голосов 40: ↑31 и ↓9+22
Комментарии19

Публикации

Истории

Работа

Unity разработчик
15 вакансий
Swift разработчик
43 вакансии
iOS разработчик
25 вакансий

Ближайшие события

3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн