Опыт создания кроссплатформенной игры (iOS/Android)


      Данный пост будет полезен разработчикам, которые только встали на радужный путь геймдева. В нашем недавнем посте уже было рассказано о первоначальных шагах нашей dream team в сфере игройстроя. Как и обещали, работаем в этом направлении дальше и решили попробовать себя в другом жанре игр. Далее будут кратко освещены некоторые моменты создания и публикации игры на двух платформах iOS и android.



    Инструменты разработки


    Cocos2d-x



      Предыдущий опыт показал, что распыляться на две платформы (ios\android) довольно расточительно, тем более с игровым проектом. В связи с этим, выбор пал на кроссплатформенность. На тот момент имелся опыт работы с Unity3D и Cocos2d. А так как предполагаемый проект был 2D-игрой, то выбор пал на кроссплатформенную реализацию Cocos2D-x. Не последнюю роль при выборе сыграла халява опенсорсноть движка.

    Cocos2d-x является открытым игровым движком, исходный код которого распространяется под лицензией MIT. Для кроссплатформенной разработки под платформы iOS, Android, Windows Phone, BlackBerry, Tizen могут использоваться такие языки как C++, Javascript, Lua. Ниже представлена таблица с платформами, где «o» означает, что все работает круто, а «i» – что разработка поддерживается, но не рекомендуется.

    Платформа имеет большое комьюнити, которое не оставит вас в беде. Из именитых компаний, использующих данный движок, можно отметить Zynga, Konami, Glu, Gamevil и KingSoft. Также недавно Microsoft Open Technologies поспособствовала легкому портированию игр на Windows 8 и Windows Phone 8.

    Разработка на JS


      Наш проект разрабатывали с помощью javascript. Использование Javascript Binding-a аргументируют более быстрой разработкой по сравнению с С++, а также возможностью запускать проект в браузерах (удобная отладка проекта в консоли браузера).

    Написание игры с помощью javascript доступно во всех реализациях cocos'a — cocos2d-x, cocos2d-ios и cocos2d-html5. Но в то время как cocos2d-html5 запускается в браузере, cocos2d-x/ios предоставляют js-binding, позволяющий значительно увеличить производительность. Фактически, весь код движка — графика, рендеринг, физика и др — будет исполняться нативно, а непосредственно игровая логика — на javascript. Также посредством нехитрых манипуляций есть возможность реализовать наиболее ресурсоемкие операции нативно. В качестве джаваскрипт-движка используется SpiderMonkey.
    Единственный браузер, где не наблюдались тормоза игры это Safari (хотя в рекомендациях советуют использовать Chrome). Путем нехитрых манипуляций мы запускали проект на ZTE Open с Firefox OS на борту.
    При использовании js для модифицирования базового кода необходимо также модифицировать и биндинг новых методов, хотя это можно делать и автоматически с помощью bindings-generator.

    CocosBuilder



      Незаменимым помощником для нас является CocosBuilder — это бесплатный инструмент (выпущен под MIT-лицензией) для быстрой разработки игр и приложений. С его помощью можно управлять сценами, спрайтами, элементами интерфейса, анимацией объектов и др. Присутствует система частиц, которую можно подготовить с помощью встроенных средств или специальной тулзы Particle Designer. Также можно настраивать покадровую анимацию, задавать последовательность анимаций и многое другое.
    На данный момент javascript поддерживается только в альфа версии 3. Доступен только для Mac OS. Ознакомиться с возможностями можно здесь и здесь.

    CocoStudio



      CocoStudio — появилась не так давно и создавалась как альтернатива CocosBuilder. Раньше интерфейс был только на китайском языке и совсем недавно его перевели на нормальный язык английский.
    При запуске программа представляет на выбор 4 редактора:
    • UI editor– кнопочки, списки и тому подобное. Пока что доступно 12 элементов интерфейса, но обещают добавить еще.
    • Animation editor – по словам разрабов, данный редактор сходен с Adobe Flash анимацией. Основной упор делается на скелетную анимацию, также присутствует и обычная покадровая анимация. Имеется texture packer.
    • Data editor – позволяет преобразовывать данные из excel таблиц в данные, пригодные для обработки в cocos2d-x.
    • Scene editor – позволяет манипулировать всеми частями проекта, полученными из первых трех редакторов. То есть можно эмулировать игровой уровень. Также есть возможность использовать сторонние вспомогательные тулзы, такие как particle designer.


    В общем, беглый осмотр возможностей дает понять, что продукт ждет радужное будущее. К сожалению, доступна только windows-версия, поэтому в своих разработках мы еще не использовали данный редактор.

    Tile Map Editor


      Tile – open source проект, который мы использовали для создания уровней.

    Работу с тайлами можно описать следующими этапами:
    • Сначала выбираем базовый размер карты, а также размер тайла.
    • Добавляем в TileSets наш атлас с картинками.
    • Размещаем тайлы на карте.
    • Сохраняем карту в стандартизированный формат tmx.

    Созданные карты сохраняются в формате TMX (Tile Map XML) – позволят гибко описать карту с тайлами различного размера, различным количеством слоев, объектов и их свойств. К примеру, можно задать различные слои для тайлов поверхности, для декораций. Также удобно задавать траектории движения объектов. Через задания свойств тайлам можно программно подменять их, допустим, на какие либо динамические объекты.
    Отличные посты для знакомства с level-редактором: раз, два.

    Texture Packer


      Texture Packer – используем для создания атласов с текстурами. Паблишить можно под различные платформы, такие как Cocos2d, Corona, Sparrow, LibGDX, LimeJS, Ogre и др. Доступно для Mac, Win и Linux. Также эта компания предоставляет еще один отличный продукт Physic Editor, который мы используем в текущем проекте.


    Сборка проекта


      Сборка проекта начинается с паблишинга в CocosBuilder, где отдельно учитываются настройки iOS, android и html5.


      Далее, в случаее iOS мы открываем проект в Xсode и наслаждаемся запуском игры на симуляторе или устройстве.
    А вот в случае android нужно немного повозиться. Необходимо настроить пути к android NDK, SDK и cocos2d-x, и потом с помощью скрипта build_native.sh проапгрейдить проект. Потом полученный проект можно открыть уже в Eclipse (или Idea) и работать уже с манифестом и java кодом. Кстати, для платежей и некоторых рекламных сетях уже существуют готовые фреймворки, но для нас не составило труда использовать нативный код для обеих платформ.
    Подробнее о настройках паблишинга можно почитать тут или тут.
    Для нашей игры выставили минимальную версию ios 5.0. Для android минимальная версия 4.0, хотя есть возможность сделать 2.3, но наша игра рассчитана на девайсы с большим экраном, да и на поздних версиях вероятность крэшей существенно снижается, поэтому пока что решили проверить работоспособность на более новых аппаратах.

    Запуск и продвижение


      В общей сложности игра заняла у нас где-то 1,5 месяца разработки. Значительная часть времени ушла на знакомство с движками и утилитами. Проект оказался на Apple Store пятого ноября ночью и на следующее утро мы приступили к промоушену. Большую часть заложенных на промоушен средств мы сосредоточили на рекламе в мобильном приложении Facebook, заложив таргетинг только по USA и по интересам, релевантным нашей игре. Также мы закупили немного шэров и лайков и ретвитов, в надежде на эффект сарафанного радио в социальных сетях Google+/Vk/Facebook.
    Остальная часть рекламной компании прошла без затрат денежных средств и заключалась в рассылке пресс-релизов к редакторам интернет-изданий про iOS/Android с целью заинтересовать их нашей игрой и возможностью попасть в какой-нибудь еженедельный дайджест или даже с возможностью обзора самой игры.
    Но, к сожалению, реклама на Facebook не дала тех положительных результатов, которых нам удалось достичь с другой нашей игрой и практически прошла бесследно. Рекламный бюджет на USA наверно можно смело умножать на 10, по сравнению с Россией (ios).
    Самые высокие позиции, которых удалось достичь на данный момент — это всего шесть стран, куда игра вошла в топ 50 по категории “Стратегия” и около 30 стран где она колеблется между 200 — 300 местом по этой же категории.



    Каких-то более-менее заметных результатов в общем топе игр или общем топе всех приложений достигнуто не было. В предстоящем времени мы приложим усилия к кросспромоушену с помощью наших существующих приложений, а также закупим пару обзоров, на 4pda, например (там, кстати, изменилась политика поддержки разработчиков). Попробуем таргетированную Facebook Ads на страны Европы (скорее всего Испания, Германия, Италия, пока еще не решили). Большую часть сил и средств бросаем на iOS платформу, так как выхлоп будет значительно больше. В общем, это был наш первый проект касательно кросс-платформенной разработки со всеми ее плюсами и минусами, так сказать проба пера и нам нравится то, что из этого получилось, будем надеяться, что предстоящая раскрутка поможет слегка поднять и удержать игру в топе.

    Подводя итог, хочу заметить, что нынешние инструменты позволяют с легкостью создавать игры, были бы идеи. Ждем ваших вопросов по процессу работы.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 19

      +1
      Ссылку на игру можно? Например в личку, чтобы не сочли за рекламу. Интересно все же.
        +1
        У меня в профиле можно посмотреть
        +6
        А как с производительностью по сравнению с нативной разработкой на плюсах? Каких хоть порядков различия?
          +3
          Коротко ответить на этот вопрос невозможно, слишком много различных факторов надо принимать во внимание.

          Это зависит от того что меряете, относительно чего, как построена архитектура приложения, как используется скриптовый движок, как сделан биндинг, какие технологии используется в игре и как они используются итд итп. Если всё сделать грамотно, то просадки производительности заметно не будет.

          Такие вопросы часто возникают при обсуждении скриптования в геймдеве и показывают, к сожалению, что до всеобщего понимания целей и задач скриптования ещё довольно далеко. Начать хотя бы с того, что при использовании скриптов никто не ставит цель рассчитывать в них сложные и тяжелые алгоритмы (понятно что это глупость), соответственно классическое влобное сравнение производительности теряет смысл в виду множества факторов (более важных).

          Собственно вопрос уже давно нужно ставить не как «падает производительность или не падает», а «как мне использовать правильно встраиваемые скриптовые языки так, чтобы не падала производительность».

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

          Сравнивать (может быть) имеет смысл два скриптовых языка, например Lua и Javascript, но и то не по скорости, а скорее по удобству биндинга, управлению памятью, гарантированному объему памяти которую потребляет интерпретатор и всему такому.
          0
          Остальная часть рекламной компании прошла без затрат денежных средств и заключалась в рассылке пресс-релизов к редакторам интернет-изданий про iOS/Android

          Можно ли как-то получить mail list редакторов изданий?
          Можно в личку.
            +1
            А Вы не сталкивались с механизмом как защититься от LocallAPStore и т.п.?
              0
              С проблемой взлома платежей мы сталкивались, но в данной игре проверка пока не проводится. Решали ее посредством простой валидации transaction receipt на стороне сервера.
                +1
                Спасибо Вам, за описание инструментария. Давно хотел попытаться собрать, что-то для дочурки самостоятельно, учитывая ее персональные интересы, и в целом, насколько я понял, описанного Вами инструментария мне за глаза хватит. :)
              +1
              Поздравляю с релизом! А как осуществлялась поддержка разных aspect ratios?
                0
                В cocos'e при разработке используются свои единицы измерения, задаваемые разработчиком — designResolutionSize. В нашем случае мы выставили размер по умолчанию 1024х768 (под ipad), и определили что ширина может варьироваться в зависимости от соотношения сторон девайсов (FIXED_HEIGHT). Таким образом, на «длинных» девайсах мы могли получить размер 1400х768. Также при дизайне интерфейсов в CocosBuilder'е есть возможность позиционировать элементы относительно различных углов (отступ от правого края 100, сверху 50). Подробнее можно почитать здесь.
                +1
                А не поделитесь конкретными данными по Facebook Mobile Ads? Какой был таргетинг (конкретные «интересы», возраст, пол, версия ОС, и т.д.)? Какая в итоге получалась «потенциальная аудитория»? Какая получилась самая лучшая цена за инсталл (и на каком таргетинге)? А CTR? Оплату ставили Optimized CPM или колдовали с bid'ом вручную? Были ли какие-то технические проблемы, зависания? И про бюджеты конкретные было бы очень интересно узнать, но не настаиваю, конечно.
                Просто мы сейчас активно экспериментируем с этим добром и иногда получаются очень хорошие результаты, но обычно их не удается повторить.
                  +2
                  Конкретно по таргетингу: возраст аудитории 18 — 37 лет, пол любой, из глобальных категорий мы выделили людей, пользователей iOS устройств начиная с iOS 5 версии, (не затрагивая Android), интересующихся играми, соц.играми, в частности мобильными играми, apple store, головломками, аркадами итд. Из языков только анлийский. Всегда выбирали Optimized CPM. Технических проблем не наблюдалось, компания запускалась и работала строго по времени. При этом охват аудитории получился где-то 6млн. человек, что, подводя итоги, мы считаем крайне большой цифрой при выбранном нами бюджете. Действительно много зависит от тонкости настроек. К примеру, для нашего прерыдущего проекта, использование такого же бюджета, но для аудитории примерно в 10 раз меньше (для России) полностью себя оправдало.
                  0
                  общем, конечно, интересно… но по сути пост ни о чем — кроме перечня использованных инструментов собственно и читать не о чем, увы.
                    0
                    Понятное дело, но не будет же автор писать здесь все подробности разработки… На изучение всего этого, лично у меня, ушло около 2х лет. Тут одной статьёй не обойдешься… Но перечень инструментов — очень полезная штука, новичкам будет полезно знать в какую сторону «копать». И при этом примерно оценить время на изучение и практический опыт…
                    0
                    Интересно, какое планируемое соотношение бюджета проекта — разработка/маркетинг? Есть ли у вас метрика «успешности» или точки безубыточности проекта?
                      0
                      Расскажите, сталкивались ли вы с какими-то трудностями при портации в Eclipse? С помощью каких инструментов отлаживали и как проверяли на утечки? Недавно тоже озадачилась проблемой портации, Eclipse показался мне очень криворукой системой. Отсутствие встроенного дебагинга для  cpp-кода меня вообще поставило в тупик. Может это я как-то не разобралась с системой? Очень бы хотелось узнать ваше мнение насчет связки Eclipse+Cocos2dX, насколько там удобна и возможна отладка проектов? Может вы рассматривали какие-то альтернативы типа VisualGDB.
                        0
                        Вообще лучше отлаживать в XCode. Там есть инструменты для отладки по поиску утечек и еще много интересного и полезного… Но я сталкивался с некоторыми проблемами во время поиска багов, а именно: некоторые баги никак не проявляются когда проект собран и работает под iOS, вплоть до выхода за границы массива… Естественно когда собираешь этот проект в Eclipse, после запуска приложение падает. Если при этом она успевает выдать дамп, и стек вызовов, где произошло исключение, то это еще пол беды… Но иногда программа тихо падает и в ANT ничего полезного не выдает… В этом случае мне очень помогла сборка проекта под Windows Phone, все баги в коде были найдены и успешно устранены… Во время запуска приложения в среде Visual Studio, если оно падает, то очень хорошо видно где это произошло и есть много шансов найти причину…

                      Only users with full accounts can post comments. Log in, please.