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

в 10:31, , рубрики: AngelScript, game development, Gamedev, iOS, irrlicht, разработка под iOS, метки: , , ,

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

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

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

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

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

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

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

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

Изначально было принято решение писать игру на С++, так как уже были готовы ряд заготовок и не хотелось тратить время на изучение нового языка. А также не хотелось переходить 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». Данная архитектура позволяет создавать сложные системы поведения и не заботиться о всевозможных переходах из состояния в состояния. Упрощённый пример такой архитектуры:
War of Machines: создание игры для iOS
Добавление нового поведения в данной архитектуре очень простое: достаточно добавить новое поведение в конкретный узел дерева и всё.
Более подробно о «behavior tree» можно узнать из статьи «Introduction to Behavior Trees».

Разработка

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

Результат

Небольшое видео того, что получилось:

Автор: twesd

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js