Срок разработки: 6+ месяцев для двух человек в свободное время.
Состав команды: 1 художник, 1 программист. Срок от идеи до прототипа - 1 неделя.
Арт-данные - 288 мегабайт, 1400 файлов.
Код движка и игры (без сторонних библиотек) ~ 50024 строк кода, 485 файлов Код игры - 4338 строк - 12 файлов Окончательный размер дистрибутива для загрузки в AppStore составляет 22 МБ.
Окончательный размер в AppStore 25 МБ.
Код был измерен с использованием blog.schuager.com/2009/01/line-count-in-visual-studio.html (В решении остались только движок и игровые проекты)
Предыстория
Часть 1 Часть 2Организация работы
Проект был организован онлайн с использованием Google Sites и Google Docs.Главная страница проектов.
Слева находится список проектов и их внутренние страницы:
Вы можете создавать страницы, шаблоном которых является файловое хранилище, например:
Ограничьте 20 МБ на файл и 100 МБ на весь сайт.
Когда наши сборки стали размером более 20 мегабайт, мы начали искать их через Google Docs.
Вы можете создавать страницы, шаблоны которых представляют собой всевозможные средства отслеживания проблем.
Плюсы:
- Бесплатно
- Не требует времени на поддержку
- В сети
Минусы:
- Отсутствие форума в функциях Google Sites.
- Ограничения на размеры файлов и размер сайта - но никто не запрещает создавать более одного сайта на один аккаунт
Разработка
Разработка происходила по выходным (всего до 10 часов за выходные) и иногда в будни после 19:00 (2-3 часа).Геймплей остался практически неизменным от стадии прототипа до выпуска.
Много времени было потрачено на балансировку спавнов, в результате были добавлены так называемые волны спавна, падающие шлемы и стрелы.
Изначально игра планировалась как платная, но в какой-то момент мы решили поэкспериментировать с бесплатной версией.
Планы по возможностям будущей платной версии сейчас очень тщательно сортируются, взвешиваются и обсуждаются.
Были сделаны значительные оптимизации с точки зрения времени загрузки и памяти (подробности ниже).
Переход на XCode 4 занял 2 дня.
Лично мне среда xCode 4 показалась не очень хорошей даже в сравнении с xCode 3 (отсутствие возможности массовой компиляции и препроцессинга, отсутствие возможности настройки панели инструментов, глюки с постоянной пересборкой Build for Archive, тормоза и др.
).
Мне очень понравилось пользоваться профайлером — на мой взгляд, это самый удобный из всех профайлеров, которыми я когда-либо пользовался (включая Windows).
С этого момента я предпочитаю вести профиль через него.
Ресурсы
Изначально рисунок был выполнен в векторе и экспортирован в png. Надеюсь, что когда выйдет 3-й iPad и будет другое родное разрешение, конвертация пройдет быстро и безболезненно.Теперь оно экспортируется для разрешения 1024x768 и обрабатывается специальными скриптами для iphone (480x320), iphone retina (960x640).
Общий:
- базовый набор ресурсов для iPad
- каждая платформа имеет свой набор ассетов (генерируется по правилам скрипта)
- если скрипт перегонки сгенерировал идентичные файлы .
png, это не проблема, так как это учитывается на этапе генерации пак-файла.
Звук
Звук в формате .ogg. Некоторые звуки воспроизводятся в потоковом режиме; количество и длина буферов OpenAL задаются через конфиг.
Потоковое воспроизведение звука было полностью отлажено на Windows и работало без малейших изменений на iPhone. В настоящее время я рассматриваю альтернативы vorbis-ogg из-за его относительно медленного декодирования.
Я смотрю в сторону IMA4 (который поддерживается на аппаратном уровне).
Возможно, звук будет конвертирован в IMA4 на этапе компиляции пакета (описано ниже).
Игровые ресурсы
Для сборки iOS все данные были помещены в пак-файл.В пак-файле компилируются ресурсы для нужной платформы с использованием дополнительных оптимизаций:
- Проверка и удаление альфа из текстур, где все белое.
- Сжимать данные, если размер уменьшает размер файла более чем на NN процентов.
- Обнаружение экземпляра файла
- Предварительная компиляция и удаление скриптов и файлов конфигурации.
- Запустите OptiPng на всех ресурсах PNG, включая Defaul.png и Icon###.
png.
- преобразование некоторых (больших) файлов png в собственный формат (из-за того, что png использует zlib (deflate), который не очень быстро распаковывает (подробности см.
ниже)
- в проекте всегда только один файл data0000.pak — избавляет от необходимости добавлять каждый ассет в проект XCode и полностью исключает ошибки на этом этапе
- Скорость загрузки - на iPhone 4 от 10 секунд до 5 секунд, на Windows от 5 секунд до менее секунды
- Размеры – все данные в пакете сжаты и оптимизированы.
Особенности реализации пак-файла
Это не zip-файл, а простой собственный формат (который часто меняется от версии к версии).Почему не zip-файл - распаковка с помощью zlib на iPhone не дает никаких преимуществ - время загрузки из файла для несжатых данных быстрее, чем распаковка.
Варианты, которые я пробовал:
- zlib — очень медленный с отличным сжатием (тестовые попугаи распаковывают за 15 мс)
- snappy - быстро, но сжатие не очень хорошее (тестовые попугаи разжимают за 5мс) (версия для Windows иногда глючит на невыровненных данных - времени особо не разбиралось)
- flastlz — быстрый и с хорошим сжатием (тестовые попугаи разжимают за 7 мс) — www.fastlz.org
Сочетание fastlz и over zip (appstore) меня устроило.
Zip для магазина приложений сжимает пакеты еще на 4 МБ.
От 19 до 15 мегабайт. В будущем планируется повторно протестировать Snappy. В предрелизные дни JPG также был переработан как альтернативный формат хранения текстур, причем не всех, а только 24-битных и только тех, которые после JPG отличаются минимальной погрешностью (я нашел как минимум 5 больших текстур, удовлетворяющих этому состояние).
Это будет дополнительный шаг на этапе составления пак-файла.
Теперь сборка пакета занимает около 15 секунд и выполняется только перед компиляцией для iPhone (берётся через RSync с машины под управлением Windows).
В AppStore есть ограничение на размер приложения 20 МБ (ограничение на скачивание через 3g).
Как ни упаковывай данные, как ни крути, у нас всегда получалось больше 20. Если бы наш продукт был платным, мы бы, конечно, разделили его на HD и неHD. В нашем случае (бесплатное приложение) мы решили его не разделять.
Реклама
В приложение встроена реклама от iAd и AdMob - баннеры не показываются во время игры (и никогда не будут показываться) В последней версии моего первого приложения была исправлена логика рекламы.Финальная версия работает так: Если iAd по каким-то причинам выходит из строя (судя по отчетам, это происходит почти в 90% случаев для не США, Германии, Франции), то подключается adMob. В результате этого изменения сумма денег, которую принесла adMob, значительно увеличилась.
Результат
Приложение можно скачать из AppStore, оно бесплатно (честно говоря, бесплатно).Приносит деньги только за клики по баннерам.
Приложение универсально для iPhone, iPhone4 (Retina) и iPad.
Полезное программное обеспечение
- AppResigner — это программа, которая позволяет вам перейти с положения дистрибутива AppStore на положение Dev, что позволяет вам протестировать двоичный файл, который вы отправите в AppStore (устройство с джейлбрейком позволяет вам тестировать даже с дистрибутивом AppStore).
- Клиент SvnX для svn для MacOS
- VisualSVN — сервер с пользовательским интерфейсом для Windows
- swRSyncServer — rsync для Windows (используется для синхронизации пакетов между Windows и MacOS)
Что хорошо:
- Ничего не катал
- Очень доволен качеством
- Нам нравится игра
Что не так:
- Не вкладывался в 20 МБ
- Это заняло много времени - около 6 месяцев - последний месяц было очень тяжело работать.
Что дальше:
- Android (скорее всего до нового года)
- Настройка полного конвейера для ночной сборки
-
Эпикурейство
19 Oct, 24 -
Я Не Могу Поймать Интернет-Сигнал? Помощь!
19 Oct, 24 -
Хорошие И Плохие Последствия Онлайн-Игр
19 Oct, 24 -
Денвер 3 Альфа
19 Oct, 24 -
Сравнение Subversion И Mercurial (Hg)
19 Oct, 24