13 December 2011

Мобильная разработка с Corona SDK

Development of mobile applications
Здравствуйте!

Захотелось поделится своим опытом работы с Corona SDK — средством кроссплатформенной разработки для Android/iOS от Ansca Mobile (основатели компании в прошлом работали в Adobe над Flash Lite). Статей здесь про него не так много, хотя движок один из самых популярных и не без причины. Corona SDK предназначен прежде всего для разработки игр, но нем можно писать и бизнес-приложения — для этого в движке есть набор UI-компонентов со сменными стилями. Главным преимуществом движка является значительное увеличение скорости разработки для опытных программистов, а также снижение технического барьера для новичков в мобильном gamedev’е. Продолжение под катом…


Я долго хотел попробовать себя в мобильной разработке, без особого желания учить Objective C или Javа и новые большие фреймворки. Хотелось использовать уже имеющийся опыт веб-разработчика. Про Corona SDK я узнал не сразу, и до него пробовал Appcelerator Titanium, Sencha Touch, JQuery Mobile и PhoneGap. Все эти средства, однако, не обеспечивают достаточной стабильности и быстродействия, особенно на Android. Из них связка Sencha Touch + PhoneGap является самой законченной, но все же не production ready. Итак…

Достоинства и недостатки


Плюсы Corona SDK:

+ разработка на простом и элегантном динамическом языке — Lua
+ симулятор позволяет видеть сделанные изменения моментально
+ простота настройки рабочего окружения (достаточно скачать симулятор и использовать редактор кода на ваш вкус, компиляция происходит на удаленном сервере)
+ компактный и интуитивный API
+ качественная документация от разработчиков движка
+ большое и активное сообщество разработчиков (количество бесплатной помощи действительно огромно и это очень помогает на начальных этапах + стимулирует помогать новичкам, когда сам уже что-то знаешь)
+ стабильность и скорость движка
+ быстрое исправление ошибок разработчиками — у многих это самое слабое звено (например, с Titanium Mobile мои баг-репорты висели в баг-трекере месяцами, с Сorona — от пары дней, до пары недель)

Минусы Corona SDK:

— лицензия $200-350/год (все вышеперечисленные средства бесплатны)
— невозможность подключать сторонние библиотеки, написанные не на Lua (скажем, модуль издателя игры или баннерной сети)
— критичный к быстродействию код все равно придется писать на Lua, если нет соответвующей функции в API движка, или искать обходные пути (они, как правило, есть)
— некоторые различия в функционале версий для Android и iOS (например, платежи внутри приложения поддерживаются пока только на iOS)

Pyro Shelf

Моим первым проектом стала игра-головоломка наподобие Bubble Blast. Т.к. разработка с Corona чрезвычайно проста, самой большой трудностью был дизайн. Все пришлось рисовать с нуля. Денег на дизайнера у меня не было. Поэтому на эту часть смело ушла половина всего времени работы над проектом. Подумайте о дизайне в первую очередь! Потом будет намного легче.

Другая трудность — поддержка разных разрешений экрана. Графику для каждого разрешения приходится делать отдельно, учитывая масштаб и соотношения сторон. Почему нельзя сделать графику один раз в hi-res, а потом только масштабировать ее в зависимости от того на каком устройстве запущенно приложение? Дело в том, что объемы текстурной памяти у устройств с небольшим разрешением экрана существенно меньше, да и максимальное разрешение текстур тоже (актуально, если вы используете спрайты для анимации). Поэтому есть смысл выпусть сначала версию приложения для iOS — всего два разрешения с одинаковым соотношением сторон (или три, если брать и iPad). С Android сложнее не только в этом плане. Судя по отзывам разработчиков, монетизация приложений, как платных так и бесплатных, намного легче на iOS. И после успеха на iOS, вам будет проще заявить о себе на Android.

Вспомогательные средства


В разработке мне очень пригодилась небольшая утилита TexturePacker, позволяющая автоматически создавать sprite sheets и Corona-код для них из отдельных картинок, с масштабированием, триммингом и многоими другими опциями. Просто не представляю, сколько времени я бы потратил задавая координаты и размеры каждой картинки в sprite sheeet вручную.

Sprite Sheet

Тот же разработчик делает другую полезную утилиту — PhysicsEditor, автоматически создающую код для физического движка Box2D, используемого в Corona. Каждая из программ стоит $20 (или $35 за bundle), но сэкономит вам не один час времени.

Вообще, для Corona сторонними разработчиками было создано множество различных средств, самые популярные из которых можно посмотреть здесь: www.anscamobile.com/corona/tools/?ref=nav

Весь код писался в IntelliJ Idea Community Edition c Lua плагином (оба бесплатны). После того как было перепробовано множество различных редакторов я остановился на этом. Разработчик проделал великолепную работу на плагином. Дополнение активно развивалось прямо на моих глазах, этим летом. Была добавлена поддержка дебаггера, модулей, рефакторинга и многих других вкусностей. А интерграция с IntelliJ Idea добавляет еще больше. Однажды я случайно удалил папку с проектом, а последний бэкап был сделал неделей ранее. Благодаря функции Local History в Idea, хранящую историю всех изменений, мне удалось восстановить проект, когда я уже ни на что не надеялся.
Для тех кто не любит пользоваться IDE, есть множество легких редакторов, самым удачным из которых, на мой взгляд, является вот этот SciTE bundle for Lua от российского разработчика.
Но использование IDE вполне оправдано. У меня в проекте было несколько сотен файлов — чуть более пятидесяти с кодом (половина из которого была автоматически сгененирована TexturePacker), более сотни — с картинками, остальные — уровни. Также, поиск по проекту — очень удобная и полезная функция Idea. Даже одна функция подстветки областей видимости переменных многого стоит!

Монетизация приложения


С Android у вас есть две опции — либо продавать свое приложение, либо использовать рекламу. С iOS добавляется еще возможность использовать in-app purchases. В качестве контент-провайдера для рекламы используется InMobi — второй крупнейший мобильный ad-network после AdMob. Буквально на днях Ansca Mobile заявила от сотрудничестве с inneractive, что должно дать возможность использовать любые баннерные сети для монетизации. Правда, для AdMob уже давно существует неофициальный хак (http://developer.anscamobile.com/forum/2011/10/17/admob-helper-module), использующийся, например, в такой известной бесплатной игре, как Blast Monkeys. Из моего собсвенного опыта, и у AdMob и у InMobi очень плохой fill-rate в некоторых странах, в том числе и в России. К счастью, AdMob хак можно переделать для работы с любой мобильной баннерной сетью предлагающей веб-интерграцию. Я рекомендую использовать AdSense for Mobile — нет проблем с fill-rate (баннеры показываются в 100% случаев) и выше CPC. Так или иначе, если вы решили использовать рекламу для монетизиции своего приложения, то вам придется столкнуться с рядом трудностей настройки. Продавать свою игру или дополнительные уровни к ней куда проще.

Заключение


В заключение хочется отметить, что чтобы попробовать движок и даже разработать на нем игру, не нужно платить деньги. С сайта anscamobile.com вы можете скачать его совершенно бесплатно, предварительно зарегистрировавшись. Заплатить придется только если вы решите выложить свою игру на рынок. Отличия демо-версии от полной небольшие: дольше компиляция (подписчики получают приоритет по времени), окошко при запуске скомпилированного приложения уведомляет что это демо-версия, нет доступа к daily builds (т.е. самым новым фишкам и исправлениям). Фактически, полноценное демо позволяет вам сэкономить деньги на подписке пока вы разрабатываете свое приложение.

P.S.
Огромная коллекция текствовых и видео-уроков: www.learningcorona.com
Мне больше всего понравились видео-уроки Рафаэля Фернандеса — очень последовальное и качественное изложение. За них можно брать деньги, но они абсолютно бесплатны.

Несмотря на отличный и быстрый симулятор, реальное устройство вам все равно понадобится для того чтобы оценить производительность. Кроме того, некоторые вещи в симуляторе не поддерживаются. Например, web-popup для отображения веб-страниц внутри приложения или OpenFeint модуль (социальная сеть для геймеров).
Tags:coronasdkluaмобильная разработкакроссплатформенная разработка
Hubs: Development of mobile applications
+27
30.4k 159
Comments 19
Popular right now
Top of the last 24 hours