ТЕКСТ: ВИТАЛИЙ НИКУЛЕНКА. В конце сентября 2011 года мне поступил заказ на изготовление игры-говорилки (наподобие Talking Tom), в которой в качестве главного героя должен был выступать полярный медведь Бернард, широко известный всем по одноименному мультфильму. К тому моменту около 5 игр было выпущено на основной работе и одна маленькая игра Galaxy Panic вышла за 3 месяца до этого. Так что, поскольку определенный опыт в разработке и выпуске игровых продуктов уже имелся, я охотно согласился выполнить данную работу.
Кто не знает, как в общем устроены говорилки – поясню. Как правило, данный тип игр состоит из набора заранеее подготовленных анимаций, которые запускаются по нажатию игроком на определенные части экрана или по каким-либо другим событиям. Анимации представляют собой набор .jpg-картинок, показываемых одна за одной с частотой около 14-15 кадров в секунду – это практически максимум, на который способен первый iPad.
Начало
Talking Bernard предполагали довольно интенсивно делать в свободное от работы время – заказчик со сроками не давил, а также предоставил довольно подробное описание игрового процесса, которое вполне сошло за черновик дизайн-документа.
В команде предполагался следующий состав:
- 1 разработчик
- 1 художник
- Я в роли руководителя и game designer
- Представитель заказчика в виде продюссера
В общих чертах, задачи стояли следующие:
- Игра должны максимально соответствовать атмосфере мультфильма
- Игра должна обновлять цены гардероба и других покупок с сервера
- В игре необходимо организовать запись видео
- Игра должна работать на iPad и, может быть – на iPhone
О проекте начали говорить в конце сентября. Неспешно обсуждали продукт, подбирали команду, запрашивали материалы у студии-производителя оригинального мультфильма. Прежде чем окончательно согласиться на работы, мы ждали рабочие материалы от студии, так называемые assets. Это было необходимо, чтобы точно определить возможность выполнения работ, а также их сроки. У нас в команде был художник с навыком владения 3DMax, поэтому, получив пакет материалов, где все модели были в Maya, мы не сильно обрадовались, т.к. для художника это означало дополнительные затраты на перенос моделей в 3DMax.
В итоге, во второй половине октября 2011 года были окончательно определены объем работ, а также – сроки сдачи работ: первая половина января 2012 года.
Подготовка к разработке
После улаживания формальностей, мы приступили к работам над игрой.
Несколько дней ушло на создание среды работы (wiki, репозиторий).
2-3 дня пришлось потратить на диаграмму use cases, где были в графическом виде представлены все переходы анимаций Бернарда.
Еще 1 день ушел на подготовку GDD с полным списком анимаций и действиями.
Параллельно художник занимался концептированием игровых сцен и пользовательского интерфейса.
Параллельно программист занимался поиском оптимальной платформы для разработки.
На все про все ушло около недели.
Да – играм, нет – технологиям!
Уже в который раз я убеждаюсь, что при разработке игр подобного плана (маленьких, мобильных, казуальных) нужно в первую очередь делать ставку на сам продукт, а не на технологии, на которых он сделан. Данная игра не стала исключением, к превеликому моему сожалению.
Преимущества разрабатываемой игры состояли в том, что большую часть времени программист и художник могли работать самостоятельно, т.к. игровой процесс был интуитивно понятен, а средства управления – просты.
Моя помощь тоже не особо требовалась, т.к. все документы были готовы, и, самое главное, всем было ясно, что делать.
Художник должен был предоставить на выходе – набор кадров анимаций и меню.
Программист должен был обеспечить работу всего того, что предоставит художник с достаточной производительностью. На практике оказалось, что не так-то просто выжать из iPad jpg 15 кадров. Программист уперся в разработку на своем собственном движке, который показал быстродействие в 3-4 кадра в секунду и потратил кучу времени на абсолютно ненужную оптимизицию ненужного, как в последствии оказалось, кода. Тем временем я проверил скорость работы Cocos 2d, но и там результаты не утешили – 2-3 кадра в секунду на jpg файлах.
Помог стандартный cocoa интерфейс Apple. Он показал ожидаемую скорость в 15 кадров в секунду.
На все мои призывы использовать cocoa + obj-c программист упорно продолжал оптимизировать свой движок. Надо сказать, я на тот момент не сильно настаивал, т.к. программирование – не основная моя специальность, поэтому, я предпочитаю не лезть лишний раз со своими советами и не мешать людям работать, полагаясь на их компетенцию.
В итоге, примерно через полтора месяца (а на дворе уже была 2-я неделя декабря), у нас был черновой набор графики и движок, позволявший играть jpg с более-менее приемлимой скоростью и все!!!
Уже наступало время для демонстрации хоть чего либо заказчику, а мы могли похвастаться лишь тем, что умеем с нужной скоростью проигрывать jpg файлы. А впереди еще стояли другие проблемы – захват видео на iPad, работа с голосом, создание игры, работа с сервером и сетью.
Поскольку программист в упор не хотел слушать моих предложений о переходе на технологии, позволяющие производить быструю разработку, то я был вынужден начать параллельную работу над альтернативной версией проекта.
В итоге – через 3 дня был готов полностью рабочий и удовлетворяющий всем требованиям производительности прототип (полностью написанный от и до на стандартном Framework от Apple).
Программисту было предложено продолжить работу над моим прототипом, но он предпочел самоустраниться, поэтому роль программиста пришлось занять мне.
Новая эра
Поскольку теперь пост программиста занимал я, то проект несколько преобразился. Он был построен на существующих технологиях/библиотеках. Я происхожу из perl программистов и предпочитаю использовать то, что уже написано, а не разрабатывать код заново. Поэтому, проект быстро обзавелся такими классами/библиотеками, как Asihttprequest, Sharekit, Semimodal, CocosDension, etc… К слову, CocosDension потом пришлось убрать и заменить собственным классом AudioPlayer, т.к. он не подходил для работы со звуком во время записи видео (необходим был более полный контроль над временными метриками). Все меню разрабатывались при помощи Interface builder.
Дальше дело пошло гигантскими шагами и к концу января 2012 года (со всеми этими издержками невозможно было не выбиться из графика) заказчику была продемонстрирована бета-версия игры (частично не хватало сетевой функциональности, некоторых анимаций, не было звуков).
В процессе написания кода в игру добавили много значительных улучшений с точки зрения удобства и маркетинга, которые врядли были бы реализованы, если бы программист остался работать и выполнял действия строго по дизайну.
Игра приобрела:
- Динамические In-app purchases
- Загрузку предметов гардероба online
- Динамические предметы для покупки за внутреннюю валюту и их обновление online
- Обновляемый список существующих приложений для их продвижения
- Подарки
- Напоминания о подарках
- Предупреждения и подтверждения.
- Вывод в дополнительное окно информации, помеченной, как важная.
- Многие другие мелочи, о которых сейчас уже и не упомнишь
Ужас и неотъемлемая часть Game development
После демонстрации продукта заказчику было предложено несколько, на первый взгляд, незначительных переделок (в частности, добавить в некоторые анимации других персонажей из мультфильма), которые в итоге, вылились в лишние два месяца трудоемкости преимущественно для художника, т.к. количество анимаций в общем осталось неизменным, но пришлось переносить и делать риггинг еще для 2-х персонажей. Дополнительно ситуация несколько усугубилась тем, что художнику подходило время работы над другими проектами. Пришлось не спать и совмещать, за что ему отдельное спасибо!
Пока художник работал над измененениями, я добавил в игру существенные мелочи:
- Защищенные NSUserDefaults, как легкое средство против читеров.
- Хранилище профилей на сервере (для восстановления внутриигровой валюты и предметов в случае переустановки приложения)
- Локализацию на русский язык
- Локализованные закачки игровых файлов (в зависимости от установленной локализации)
- Шаринг действий на Facebook и Twitter
Как итог, игра Talking Bernard вышла в продажу только в середине мая 2012 года
Некоторые цифры:
- Время от упоминания до выхода в продажу: 8 месяцев
- Длительность активной разработки: 6 месяцев
- Примерное время, потраченное на ожидания ответов от заказчика/студии: 1.5 месяца.
- 21 анимация
- Более 1400 кадров
- Около 65 мегабайт игровых данных
- Около 300 килобайт кода игры (не считая бибилиотеки и сторонние классы)
Спасибо, что дочитали :)
iPad: Freemium [iTunes link]
11 комментариев
Форум →На IPad 2 в течении 10 секунд наблюдаю название фирмы после чего прога вылетает.
@iPad HD, А можно узнать версию прошивки?
@NackerUS,
5.1.1
Я снёс и скачал заного-заработало.
Прога не впечатлила-вообще никакая.
А вот говорящего Тома дети могут гладить сутками и с Жирафой в ладошки играть неделю. От художника много зависит. Хотя мож он и в мультике такой (мульт невидел)
а как бы связаться с автором?
связаться можно через форму тут: http://iphone.flexbl.by/ibernard/support/
Ну 15 кадров в секунду, это же совсем мало. Так не должно быть.
Почему вы выбрали jpeg формат? Это очень тяжёлый формат (много операций совершать надо), я на лабораторках делал кодер и декодер, я знаю.
Формат png должен быть легче для использования.
Всё равно интересно почему именно jpeg. И спасибо за статью, конечно же.
@winwin, смотрите – давайте посчитаем, используя данные из статьи:
1. 1400 кадров. Средний размер png кадра размером 1024х768 – около 1.5 мб. Получается, что размер одних только анимаций составил бы 2.1 гигабайта. При использовании jpg – размер анимаций составил около 55 мб. Это самое главное, почему мы использовали jpg.
2. При теоретической скорости проигрывания в 15 кадров в секунду, устройству пришлось бы обрабатывать 22 мб png файлов каждую секунду. Для него это куда более неподъемная задача, нежели декодирование 670кб jpg файлов.
Вот как-то так :). Удачи!
а где здесь собственно говорилка? в тексте статьи говорится лишь о проигрывании анимаций из jpg. А хотелось бы немного узнать, какой класс использовался именно для звука?
Мне вот что стало интересно. Почему вы не решили вопрос с программистом сразу, как стало ясно, что его действия приводят к срыву сроков? Что значит не захотел? Чисто с точки зрения менеджмента интересно.
как мама 5-тилетки, не люблю “говорилки”: они очень нравятся детям, но 90% из них содержат скрытые элементы насилия =( неужели без этих американизмов никак не обойтись?
@inesska, правда, “Бернард” – сам по себе явно не детский мульт… Так что в данном случае мой предыдущий коммент больше для “поворчать” =)
Нашли орфографическую ошибку в новости?
Выделите ее мышью и нажмите Ctrl+Enter.Как совершать внутриигровые покупки в приложениях на аккаунтах Apple ID других стран
Что делать, если после обновления iOS или macOS задвоились контакты
Почему в iOS блок управления плеером переключается на другие приложения
За что отвечают системные службы геолокации на iPhone?
Как избавиться от спама в календаре на iPhone?
Как на MacBook с процессором M1 вернуть кнопки регулировки подсветки клавиатуры
Куда пропало приложение iCloud Drive в iOS 10?
Старый iPhone начал снимать хуже. Как исправить ситуацию?