Dev Story МонстроПёс — история о беге, полётах и фруктах

ТЕКСТ: НИКИТА ДЁНИН (BRITE KIDS) После того, как мы закончили нашу детскую книгу «Виксы» [iTunes link], пришло время думать, куда же двигаться дальше. Нам не хотелось расставаться со своими персонажами, но мы стремились создать что-то новое. «А ведь у нас есть собака, маленькая, но очень гордая!» — подумали мы и решили: вот наш новый герой.

Концепция

Повторять механику существующих игр или делать очередной клон «злых птиц» неинтересно, и мы решили создать что-то новое, но с оглядкой на успешные продукты с затягивающим и в то же время простым геймплеем. В голове роились картинки двухмерных аркад, рюкзаков для полётов и образы катаны, рассекающей фрукты. И вот после долгих размышлений короткими летними вечерами родились первые наброски (которого тогда мы звали просто Краббл): маленькая беззлобная собака, которая пытается догнать своего обидчика — апатичную свинью за рулём грузовика с фруктами, — внезапно превращается во всесокрушающего фиолетового монстра и размазывает фрукты по дороге с таким усердием, что позавидовал бы любой танк.

Подготовка

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

Относительная простота использования Cocos2D также повлияла на выбор: нам не приходилось разбираться с низкоуровневым программированием графики. Создать сцену, поместить на неё спрайты — и вперёд. Благодаря хорошей проработанности движка можно было сосредоточить внимание на механике игры, а не на реализации отрисовки, воспроизведения звуков и физики.

Первые сложности

Так как игра динамичная, и на экране зачастую присутствует большое количество объектов, то в первую очередь нам пришлось задуматься о производительности и доступных ресурсах аппаратов. Если старый iPhone 3GS работал «на ура» (так как разрешение его экрана в два раза ниже, чем у аппаратов с Retina, а аппаратная начинка относительно близка к ним), то на аппаратах линейки 4/4S становились заметными подёргивания и замирания игровых сцен. Эти проблемы решались долгим и нудным профилированием и упрощением алгоритмов. Сократить количество вычислений здесь, убрать ставший ненужным кусок кода там — и вот уже ощущения от игры становятся гораздо приятнее.

Читайте также  iFixit опубликовали инструкции по ремонту Apple Watch

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

Фруктовое безумие

Самые большие проблемы начались, когда у нас появились летящие и падающие фрукты. Спрайты фруктов «съедали» жуткое количество памяти, и приложение «захлёбывалось» и падало. Обложившись документацией и переключив мозги в форсированный режим, мы взялись за оптимизации. Дважды переписанные куски кода, отвечающие за перерисовку фруктов, упаковка спрайтов в атласы, создание физических тел с помощью специальных редакторов — и вот уже через какое-то время мы сами отвечали на вопросы, связанные с генерацией двух тысяч спрайтов, на Stackoverflow.com, где ещё совсем недавно сами пытались выловить хоть какие-нибудь частицы информации.

Мультиплеер

Мультиплеер стал самой сильной головной болью. Мы настолько загорелись идеей реализовать её, что решили: не есть, не спать, но сделать. Самая большая (да и, пожалуй, единственная) проблема мультиплеера — синхронизация состояний между устройствами. И если при наличии сервера проблемы рассчёта всех состояний лежат на плечах сервера, то в случае с прямым соединением между игроками все проблемы синхронизации обрушиваются на клиентские аппараты.

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

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

Подготовка к публикации

Исходные материалы, занимающие 311 мегабайт, git-репозиторий, «раздувшийся» до 838 мегабайт… И всё это очень хочется уместить в 50 мегабайт финального пакета, который пользователи будут скачивать из App Store (причина проста: загрузка приложений через сотовые сети искусственно блокируется Apple, если их размер превышает 50 мегабайт).

Читайте также  Счастливым обладателем гифт-карты на $10000 стал американец

В ход пошли утилиты для обработки изображений с целью уменьшения их размеров. Часть картинок удалось индексировать, не пожертвовав при этом качеством, часть была прогнана через оптимизаторы. Но от набора графики для iPad с Retina-экранами пришлось отказаться. Попробовав поиграть на таком аппарате с графикой для обычного iPad, мы поняли, что динамика игровой сцены делает незаметной лёгкую размытость контуров. Поэтому было решено не включать в приложение изображения для экранов высокого разрешения.

Публикация

Рассмотрение игры цензорами Apple прошло в полной тишине. У них не возникло вопросов ни по поводу внутриигровых покупок, ни по геймплею, ни по стабильности работы. Тихо и скромно статус сменился с «Waiting for Review» на «In Review», и буквально через пару часов после этого на почту пришло уведомление, что игра готова к публикации. И вот мы снесли с аппаратов тестовые версии с сундуками набранных за время тестирования монет, поставили «боевые» версии из App Store и начали каждый свой путь к игровому Олимпу, на вершине которого сидит гордый фиолетовый пёс и с чувством выполненного долга жуёт корку арбуза.

Обзор для iPhones.ru:

iPhone + iPad: Бесплатно [iTunes link]

Источник: iphones.ru

RIOS