15 апреля 2013

iOS: стартуем...

Сегодня я немного позанимался портированием игры с Flash на iOS, и решил рассказать об этом занятии, поделиться что ли...
В общем, все делом в том, что я никогда не программировал под iOS, никогда не исследовал этот вопрос, не изучал все тонкости портирования флеш-игр. Первым делом у меня возникла надежда, что тонкостей особо и нет, что все должно пройти гладко и спокойно. Но этого не произошло, сборка с помощью Air оказалась намного более сложным процессом, чем я мог представить ранее
Поэтому я решил попробовать собирать свои мысли и находки по вопросу iOS-разработки в журнале, чтобы и самому не забыть и с другими поделиться! А сегодня - первая подборка, введение как бы... поэтому не ждите кусков кода или каких-то великих открытий. Сегодня - только мои первые бессвязные мысли, немного об инструментах и общие положения, связанные с портированием флешки на iOS...
Установка
Сначала нужно загрузить Air, подключить в FDT и указать все необходимые сертификаты для сборки.


Первый запуск
Получилось! Ура! Какой-то ipa выплюнулся на выходе. Что это за файл? Это и есть файл-приложения, устанавливаемый на i-девайс... Что теперь с ним делать? Нужно-таки и  установить на девайс и проверить как все работает... Я скачал программу iFunBox, в которой использовал только одну кнопку - Install App. Все было замечательно, но немного нудно, если честно... Туда-сюда переключись, приложение загрузки и т.д...
Порывшись в настройках сборки проекта в FDT, я нашел возможность заливать ipa-файл в автоматическом режиме. Выглядит это так:


Я - новичок...
Хочу еще раз напомнить, что я собираю приложение в FDT, не так давно пересев на этот IDE, я в нем пока не успел разобраться как следует и зачастую допускаю глупые ошибки... если что - поправляйте меня в комментариях, буду рад любому совету!
Также добавлю, что, если на флеш я программирую где-то года два, то iOS-устройства для меня новинка... И здесь также имеются подводные камни, которые мне пока не разглядеть. Поэтому я буду стараться описывать свои находки здесь, в журнале. Например, сейчас меня гложат вопросы - "что такое ASC 2.0?", "стоит ли переходить на Starling?", "стоит ли отказываться от растеризации объектов?", "как определить, сколько приложение кушает оперативки?", "как избавиться от подтормаживаний при растеризации?", "стоит ли заморачиваться на iPhone, или сконцентрироваться на iPad?"... и так далее и тому подобное...
Но, вернемся к текущей разработке...

Версия Air
Взглянув на используемый Air, я немного встревожился - стояла версия 2.5... В предыдущих сообщениях мне посоветовали установить самую свежую версию, таким образом есть возможность того, что производительность сильно возрастет. Но, загрузив Air 3.6 и скопировав его в нужное место, я обнаружил, что сборка проекта вообще перестала работать! Начали вылезать странные ошибки, связанные с java. Погуглив, я все время натыкался на советы "откатите jdk до версии 1.6"... Так у меня и так установлена только 1.6! Что делать?!

Flex 4.6, Air 3.6, jdk- ?
Я долго мучался, пытаясь разобраться что и как... Скачивал последнюю версию jdk, сливал различные flex и air, даже вообще удалял jdk с компьютера. Ничего не помогало! И вот, о, чудо, заработало! Я снова как и прежде слил Flex 4.6 и Air 3.6, а также удалил jdk, и ошибки пропали! Конечно, стоит во всем этом разобраться, чтобы не допустить этого снова... но пока я праздную, ведь мне удалось добиться желаемого результата!

Frames per second
Ну и как? - спросите вы... Как теперь производительность? Ну, определенно стало лучше! Не могу сказать точно, пока ориентируюсь на глаз, но заторможенность процесса и след простыл. Конечно, я буду оптимизировать графику, снижать общую нагрузку, но результат уже на лицо... Adobe трудядся в поте всего тела, раз смогли так значительно увеличить скорость работы своего Air! Молодцы!

Что дальше?
Теперь я буду переносить весь проект на новый лад. Буду многое переделывать, добавлять новые фичи, бороться со всякого рода проблемами. Например, сейчас не работает звук. Как я понял, для корректного воспроизведения на iOS, нужно переписывать код загрузки и запуска самих звуков. Не уверен, что с этим получится разобраться быстро. Также я встретил 
проблему, связанную с разницей в мышке и тапах. Выглядит это так, что кнопки не отжимаются в нормальное состояние после тапа. То есть я тыкнул пальцем, кнопка подсветилась, но не вернулась обратно. Таким образом, тапнув по всем кнопкам на экране, можно подсветить их всех, ужас! Ну и, конечно, одна из гравных проблем - все жутко долго грузится... Выбираю какой-нибудь уровень и игра зависает на десяток секунд. Выглядит удручающе... Но проблемы таятся не только в программной части игры! Достаточно вспомнить, что разрешение флешки и iPad-а, например, отличаются довольно сильно!

Разрешение
Изначальная флешка имела размер 640x480. Разрешение экрана iPad'а - 1024x768 (не учитывая Retina-экраны). С одной стороны - это катастрофа, нужно переделывать все, начиная с меню и заканчивая элементами уровней, расположением хинтов, масштабом игровых объектов и вообще всего-всего. Но с другой - высовобождается немного лищнего места, из-за чего я смогу делать чуть более сложные уровни, добавить каких-то новых веселых фич.
Масштабный коэффициент игровых объектов получился 1.3, и тапать удобно и громоздко пока не выглядит. Так что сделать играбельными уровни, надеюсь, будет не трудно... А вот меню, все диалоги, прелоадер, расположение хинтов и многое другое придется переделывать практически с нуля.

Когда ждать релиза?
Не знаю... планы такие: первую работоспособную демку буду рассылать всем известным мне паблишерам на iOS. Когда они все откажутся - буду допиливать сам и попробую выпустить своими силами... Посмотрим, что из этого выйдет! Кстати, тыкать пальцем по экрану вместо кликов мышки - определенно классно! Какое-то ощущение живости происходящего, как бы близкий контакт с игровым миром... Супер! 

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

Сообщения, схожие по тематике:

7 коммент.:

  1. Молодцом, что не только код пишешь, а и статьи :) Но почему iOS? С Android веселее, и с лицензиями разработчика там попроще(пересылать данные по факсу для регистрации продавца в AppStore - это нечто). Хотя, если этот мартышкин труд на издателя переложить, то все проще :)

    Возьму на сбея наглость ответить на некоторые вопросы:
    что такое ASC 2.0?
    Просто следующая версия компилятора actionscript: поправлены баги, добавлены фичи, обратная совместимость сохранена

    стоит ли переходить на Starling?
    Да, стоит, если ориентирванное на обычный рендер приложение тормозит - я с одним проектом так ошибся, в итоге потратил лишних пару недель на портирование(не без положительного эффекта - подчистил код)

    стоит ли отказываться от растеризации объектов?
    нет, при отрисовке с аппаратным ускорением это повышает производительность

    как определить, сколько приложение кушает оперативки?
    System.privateMemory

    как избавиться от подтормаживаний при растеризации?
    выполнять растеризацию при загруке уровня, можно подсмотреть здесь: http://anthill.ant-karlov.ru/

    стоит ли заморачиваться на iPhone, или сконцентрироваться на iPad?
    определенно стоит заморачиватся максимально доступным количеством устройств :)

    ОтветитьУдалить
    Ответы
    1. Если не ошибаюсь, то факс пересылать уже год как не надо - с появлением русского и украинского AppStore: http://habrahabr.ru/post/157461/

      Удалить
    2. C4,
      спасибо за ответ! сейчас попробую прокомментировать...

      да, как правильно подсказывает Триникс, теперь можно стать разработчиком без факса. Я как раз так и зарегистрировался.

      по поводу iOS - из девайсов у меня есть айПад, хоть тестировать могу... а Андроид - не знаю, может потом и на него наброшусь :)

      по поводу ASC 2.0 большое спасибо... много где встречал, что с ним приложение работает шустрее! но мне не удается никак им скомпилировать, ошибки лезут.

      Starling - круто, согласен! Но я пока изначальные флешки тоже продаю, а со starling это будет сделать проблематичнее... поэтому такой вопрос и возникает!

      ок, растеризацию оставлю. правда GpuMode пока не использую, с ним много артефактов лезет.

      за privateMemory отдельное спасибо, буду пробовать!

      растеризацию при загрузке уровня делаю, но при этом получается секундное подтормаживание при выборе уровня, не комильфо :(

      ок, буду искать друзей с iPhone'ами для тестов! спасибо!

      еще раз благодарю за комментарий! мне всегда радостно пообщаться!

      Удалить
    3. Триникс, нужно...по крайней мере месяц назад точно надо было заниматься этими извращениями. Цитата по твоей ссылке:
      "Переходим к заключительному этапу. Отправляем факс с помощью PamFax на номер указанный в шапке Purchase Form. Очень важно понимать что на том конце провода (в Калифорнии) люди начинают рабочий день тогда, когда мы уже пришли домой и ваш факс отправленный в 10 утра по киевскому времени никто не получит. Поэтому советую смело отправлять в 20:00"
      Тут видимо еще имеет место "серьезность" Apple - они хотят работать с компаниями, а не с отедльными indy-разработчиками, так как последние приносят намного меньше их любимых процентиков прибыли :). Впрочем, если Lampogolovii говорит что все нормально из собственного опыта - остается только поверить, что мы с свое время что-то делали не так :)

      2Lampogolovii
      >>Starling - круто, согласен! Но я пока изначальные флешки тоже продаю, а со starling это будет сделать проблематичнее... поэтому такой вопрос и возникает!
      Никаких пробелм, если визуализация отделена от логики - взять тот же популярный MVC(хотя я предпочитаю свой велосипед), в Starling архитектура и работа с объектами очень похожи на "родную" Flash.

      В дополнение могу сказать что когда захочется вводить какой-то доп.функционал, вроде in-app purcahse - придется садится за инопланетный xcode либо довольствоватся сторонними расширениями ANE.

      Удалить
    4. я зарегистрировался 12ого февраля, никаких факсов не высылал.
      раньше нужно было, да. теперь можно и без факса, как и ежегодное подтверждение.

      потыкался со Starling - ничего не выходит... скоро создам сообщение с перечислением проблем, которые я не знаю, как обойти...

      да, на ANE многие жалуются. но пока мне хватает проблем и с обычным портированием флешки. намучался уже, надо бы переключиться на что-нибудь попроще, а то беситься малость начинаю аж...

      Удалить
    5. По поводу Starling - у тебя же есть мой ICQ, пиши если что.
      >>да, на ANE многие жалуются
      Поверь, там не на что жаловаться - это просто нативный код, результат работы которого можно отпоавить флешке(при желании даже сериализировать объекты Java можно, как с objectiveC - не в курсе). Так что жалобы могут быть разве что на крвые моменты в нативном коде платформы, например, для нового биллинга GooglePlay нужно запускать Activity, пришлось выкручиватся, переходя со старого решения с Service, просидев пару ночей, и вдумчиво вчитываясь в вывод logcat. Хотя, вполне вероятно, что если бы я хорошо знал платформу, то нашел бы способ работать с сервисом - это, по сути, и есть неприятный момент - чтобы не отвалилось наше расширение утащив с собой все приложение, нужно хорошо знать целевую платформу :)

      Удалить