ТЕКСТ: НИКИТА ДЁНИН (BRITE KIDS) После того, как мы закончили нашу детскую книгу «Виксы» [iTunes link], пришло время думать, куда же двигаться дальше. Нам не хотелось расставаться со своими персонажами, но мы стремились создать что-то новое. «А ведь у нас есть собака, маленькая, но очень гордая!» — подумали мы и решили: вот наш новый герой.
Концепция
Повторять механику существующих игр или делать очередной клон «злых птиц» неинтересно, и мы решили создать что-то новое, но с оглядкой на успешные продукты с затягивающим и в то же время простым геймплеем. В голове роились картинки двухмерных аркад, рюкзаков для полётов и образы катаны, рассекающей фрукты. И вот после долгих размышлений короткими летними вечерами родились первые наброски МонстроПса (которого тогда мы звали просто Краббл): маленькая беззлобная собака, которая пытается догнать своего обидчика — апатичную свинью за рулём грузовика с фруктами, — внезапно превращается во всесокрушающего фиолетового монстра и размазывает фрукты по дороге с таким усердием, что позавидовал бы любой танк.
Подготовка
В качестве движка для игры сразу и единогласно был выбран Cocos2D. Во-первых, этот движок бесплатен для использования (при условии, что в конечном продукте есть явное указание на него). Во-вторых, на сайте доступна вполне вменяемая документация и имеется активное сообщество разработчиков, с которыми можно пообщаться на тематических форумах.
Относительная простота использования Cocos2D также повлияла на выбор: нам не приходилось разбираться с низкоуровневым программированием графики. Создать сцену, поместить на неё спрайты — и вперёд. Благодаря хорошей проработанности движка можно было сосредоточить внимание на механике игры, а не на реализации отрисовки, воспроизведения звуков и физики.
Первые сложности
Так как игра динамичная, и на экране зачастую присутствует большое количество объектов, то в первую очередь нам пришлось задуматься о производительности и доступных ресурсах аппаратов. Если старый iPhone 3GS работал «на ура» (так как разрешение его экрана в два раза ниже, чем у аппаратов с Retina, а аппаратная начинка относительно близка к ним), то на аппаратах линейки 4/4S становились заметными подёргивания и замирания игровых сцен. Эти проблемы решались долгим и нудным профилированием и упрощением алгоритмов. Сократить количество вычислений здесь, убрать ставший ненужным кусок кода там — и вот уже ощущения от игры становятся гораздо приятнее.
В дополнение к этому мы столкнулись с проблемой отрисовки фонов. Задние планы по нашей задумке должны двигаться с параллаксом (т.е. дальние слои движутся с более низкой скоростью, чем ближние к наблюдателю), и в движке имеются готовые методы для создания этого эффекта. Но они оказались слишком ресурсоёмкими и не совсем отвечали тем задачам, которые мы на них возложили. Поэтому было решено написать собственную реализацию. Как выяснилось, делается это элементарно и было, пожалуй, одной из наиболее простых задач, которые нам нужно было выполнить.
Фруктовое безумие
Самые большие проблемы начались, когда у нас появились летящие и падающие фрукты. Спрайты фруктов «съедали» жуткое количество памяти, и приложение «захлёбывалось» и падало. Обложившись документацией и переключив мозги в форсированный режим, мы взялись за оптимизации. Дважды переписанные куски кода, отвечающие за перерисовку фруктов, упаковка спрайтов в атласы, создание физических тел с помощью специальных редакторов — и вот уже через какое-то время мы сами отвечали на вопросы, связанные с генерацией двух тысяч спрайтов, на Stackoverflow.com, где ещё совсем недавно сами пытались выловить хоть какие-нибудь частицы информации.
Мультиплеер
Мультиплеер стал самой сильной головной болью. Мы настолько загорелись идеей реализовать её, что решили: не есть, не спать, но сделать. Самая большая (да и, пожалуй, единственная) проблема мультиплеера — синхронизация состояний между устройствами. И если при наличии сервера проблемы рассчёта всех состояний лежат на плечах сервера, то в случае с прямым соединением между игроками все проблемы синхронизации обрушиваются на клиентские аппараты.
Долгий процесс проектирования, попыток реализации и поисков рекомендаций всё больше и больше раздражал нас, пока в конце концов мы не наткнулись на отличную статью разработчиков компании Valve о том, как работает мультиплеер в движке Source. Эта статья была прочитана вдоль и поперёк три раза, и хотя на практике мы не воспользовались ни одним решением из неё, она показала нам, в какую сторону нужно двигаться.
Через четыре дня после знакомства с этой статьёй мультиплеер был готов, и мы начали забрасывать друг друга фруктами и уворачиваться от них в локальных и международных баталиях.
Подготовка к публикации
Исходные материалы, занимающие 311 мегабайт, git-репозиторий, «раздувшийся» до 838 мегабайт… И всё это очень хочется уместить в 50 мегабайт финального пакета, который пользователи будут скачивать из App Store (причина проста: загрузка приложений через сотовые сети искусственно блокируется Apple, если их размер превышает 50 мегабайт).
В ход пошли утилиты для обработки изображений с целью уменьшения их размеров. Часть картинок удалось индексировать, не пожертвовав при этом качеством, часть была прогнана через оптимизаторы. Но от набора графики для iPad с Retina-экранами пришлось отказаться. Попробовав поиграть на таком аппарате с графикой для обычного iPad, мы поняли, что динамика игровой сцены делает незаметной лёгкую размытость контуров. Поэтому было решено не включать в приложение изображения для экранов высокого разрешения.
Публикация
Рассмотрение игры цензорами Apple прошло в полной тишине. У них не возникло вопросов ни по поводу внутриигровых покупок, ни по геймплею, ни по стабильности работы. Тихо и скромно статус сменился с «Waiting for Review» на «In Review», и буквально через пару часов после этого на почту пришло уведомление, что игра готова к публикации. И вот мы снесли с аппаратов тестовые версии с сундуками набранных за время тестирования монет, поставили «боевые» версии из App Store и начали каждый свой путь к игровому Олимпу, на вершине которого сидит гордый фиолетовый пёс и с чувством выполненного долга жуёт корку арбуза.
Обзор для iPhones.ru:
iPhone + iPad: Бесплатно [iTunes link]
11 комментариев
Форум →Попробуем ! Спасибо !
Пользуясь случаем, хочу еще раз поблагодарить за Виксов! Прекрасная книжка, которая помогала нам засыпать много-много вечеров :)
Теперь попробуем краббла Мопси в сольном режиме!
@Und, Пожалуйста :-) Мы рады, что книжка способствует здоровому сну.
Отличный собак! Спасибо!
@TrasserZero, Играйте и выигрывайте.
Ребят… а где справка-то? Совершенно непонятно, что делать. Валятся какие-то фрукты — их подбирать? Или избегать? Умер пару раз, но не понял, от чего.
@migmit, Уворачиваемся от фруктов, собираем монеты. Когда монет станет много, и собака превратится в монстра — можно разбивать фрукты.
Фрукты вас отвлекли от правильной мысли!
Грузовик должен был быть почтовый. Даже не грузовик, а почтальон на велосипеде.
А кидался бы он газетами, журналами, почтовыми ящиками и посылками )))
Спасибо за дев-стори, очень интересно.
Wigman Big Run, Ребятки, Wigman Big run :)
очень красивая картинка, графика в игре, но механика реализована плохо, физика очень странная и играть в итоге не удобно, можно, конечно, напрячься и приловчиться, но зачем? я бы вам предложил переделать физику, сделать игру более естественной в поведении и управлении, удачи!
Крутая игрушка, ща скачаю!
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Как освободить место на iPhone?
Как отвязать банковскую карту от Apple ID
Почему iPhone подключается к сети Wi-Fi не с первого раза
Почему экран iPhone не блокируется во время звонков
Как «сбросить» iPhone без обновления iOS?
Забыл контрольные вопросы Apple ID. Как их поменять?
Как выбрать загрузочный диск Mac без стандартной клавиатуры Apple
iPhone не подключается к домашней сети Wi-Fi. Что делать?