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

    В этой статье я хочу поделиться с вами своим практическим опытом разработки игры для 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. Данная библиотека показывает информацию по утечке памяти с информацией о коде:


    Результат


    Небольшое видео того, что получилось:
    Поделиться публикацией

    Похожие публикации

    Комментарии 19

      +1
      Скажите пожалуйста, а модели вы делали сами? И где?
      Также, мне было бы интересно посмотреть, что собой представляет спецификация на подобного рода игру?
        0
        Модели мне делал фрилансер. А вот анимацию моделей делал сам в Maya. Спецификацию выслал в личку.
          +3
          Открываю функциональную спецификацию для всех:
          docs.google.com/open?id=0B9mf2xlbGyDdaVdrcEdfTUdXWWc
          Она не совпадает на 100% с игрой, так как к концу разработки не обновлял её.
            0
            >>Ну вот, злобный юзвер открыл первую стадию…

            Как вы по доброму то к пользователям)
              0
              Ссылка не загружается((.
            +1
            Весьма здоровски получилось, мне нравится.
            Как идут продажи? Последнюю версию ведь выложили 12 апреля, должна уже накопиться статистика.
            Вообще, здорово было бы, если бы вы рассказали, как проект живет после выхода.
              0
              Платная версия, к сожалению, оказалась провальной (примерно 1-2 продажи в день). Недавно выпустили бесплатную версию с рекламой, может эта версия себя оправдает.
                0
                Поддержал отечественного производителя — приобрел платную версию. Free-2-Play безумно раздражает рекламой, очень печально, что это стало наиболее популярной моделью распространения игр сейчас. А вообще — вам бы с паблишером каким хорошим договориться. Игрушка-то вполне ничего.
                  0
                  Игра уже выпущена через издателя. Издатель сказал, что игра плохо ведёт себя в маркете и вложенные 1000$ возвращают только 100$.
                    +1
                    Кто издатель, если не секрет? «Плохо ведет себя в Маркете» — эта фраза либо скрывает за собой банальный обман, либо беспросветную глупость. «Игру плохо скачивают, потому что...», «Игру плохо покупают, потому что...» — и далее список выявленных проблем, например, плохое описание, тусклые иконки или еще что-то. Издатель на то и издатель, чтобы вести маркетинг и анализировать ситуацию, а не отвечать как наши политики в духе «масло подорожало».
                      +1
                      Нет, не секрет. Мой издатель bemob.com
                        +1
                        Хммм… А может «дело было не в бобине»? Может издатель неправильный маркетинг делает?
              0
              Скажите, а почему в качестве движка не рассматривался Unity? До-диез достаточно простой язык и подобные поделки делаются буквально за неделю.
                0
                Давно присматриваюсь к Unity, но подробно ещё не изучал. Хотел бы узнать, а такие вещи как «behavior tree» реализовываются в скриптах? А не будет ли это медленно?
                Например, у меня сейчас есть реализация наследования поведения и его переопределение в наследнике. Например, есть солдат, но мне нужен такой же, но немного модифицированный (другая атака или ещё что либо). В Unity есть подобные вещи?
                Я больше всего люблю open-source компоненты за то, что если возникает проблема или непонятное поведение в компоненте, то легко можно залезть вовнутрь и понять в чём дело.

                0
                App Store сообщает что у платной версии предложение встроенных покупок. Т.е. у вас и версия платная и покупки встроенные? Может надо было оставить одну бесплатную версию со встроенными покупками и одну платную (2.99$) но без встроенных покупок?
                  0
                  Да в игре есть одна встроенная покупка. Изначально игроку даётся 3 суперсилы. С помощью данной способности он может легко пройти уровень, если застрял. Единственный in-app: прикупить 5 супер сил, если начальные 3 кончились. Это небольшая моя наглость – встроить in-app в платную версию. Игру можно легко пройти без него.
                  Цену в 1$ выбирал издатель.
                    0
                    Спасибо за ответ. Приобрел полную версию. Игра прикольная, посмотрим что будет дальше. И еще, попробовал поискать игру в Яндексе/Гугле нет обзоров ни на одном популярном ресурсе, так что… спасибо хоть здесь написали.
                  0
                  GUi from Irrlicht? Или сттронняя/своя надстройка, ато при всех его преимуществах с гуем у иррлича весьма тосклива.
                    0
                    GUI своя надстройка. У меня в игре сложных элементов GUI нет, в основном только кнопки.

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое