Today, the speed of development is a very important factor in choosing the toolset for both major companies, and single developers. Can the development process be comfortable and efficient at the same time? How can one use Corona to the fullest extent? How can one keep the entire “zoo” of screen resolutions, using one and the same code? Myth breaking, secrets of efficient development and answers to these questions are waiting for you in the speech
Corona SDK: Fast development of cross-platform games
1. Corona SDK: Быстрая разработка
кроссплатформенных игр
Сергей Лалов – Spiral Code Studio
@SergeyLerg
08.12.2013
2. Что такое Corona SDK
SDK, позволяющее создавать кроссплатформенные
приложения
Поддержка Android и iOS (скоро Windows)
Возможность разработки на Windows и Mac OS X
2D графика (даже 2.5D)
Язык Lua
Быстрый и удобный симулятор
Компиляция без запуска Xcode
3. Lua – это хорошо!
Хорошо зарекомендованный
Простой, легкость освоения
Кроссплатформенный и встраиваемый
Доступно много кода
Динамический
Малый вес в приложении 1.4MB
На iOS нельзя JIT – LuaJIT, JavaScript V8
4. На что способна Corona?
Довольно высокая производительность
Достаточно обширный API
У Starter версии наиболее значимое отличие – это
только лишь отсутствие внутриигровых покупок
Enterprise версия позволяет добавлять собственные
плагины
5. Сторонние SDK и не только
Ad: Chartboost, Vungle, iAd, AdMob, RevMob…
Facebook, Twitter, GameCenter, Google Game Services
In-Apps: Apple, Google, Amazon, OUYA
Flurry, ZIP, SQLite, JSON, LFS, Bit, Videos, Maps
Storyboard, Transitions, Timers, Physics, Joysticks
И др.
6. Миф #1 - Disclaimer
Нет, мне не заплатили, чтобы я рассказывал про корону.
Она мне правда нравится.
7. Миф #2 – Corona медленная,
потомучто кроссплатформенная
Ядро короны написано на чистом С++ и OpenGL
Для системных вызовов написаны обёртки на
Objective-C и Java
Lua используется только для дополнительных
библиотек вроде Widgets, Timers и Transitions
По факту Lua очень редко является узким звеном у
приложения
8. Сравнение производительности
с Unity2D
Создание спрайтов по нажатию на экран
Спрайт 128x128px 16 кадров png
Тестирование на iPad 2
Unity2D - 3800 объектов 10fps, 1650 - 25fps
Corona - 3700 объектов 10fps, 1450 - 25fps
9. Миф #3 – На Corona нет
достойных игр
Corona Hall of Fame
http://www.coronalabs.com/halloffame/
Fun Run, Major Magnet, Blast Monkeys, The Lost City
Freeze, Official apps for The Lorax, Fling a Fish,
BraveSmart и др.
10. Миф #4 – Corona только лишь
для игр
Widgets
Можно создавать свои
Проблемы с нативными элементами есть, но они
решаемы
По сути ограничение только в фантазии
11. Одновременная разработка
для iOS и Android
Для подавляющего большинства проектов нет смысла
отдельно создавать версии под каждую из платформ.
Средства кроссплатформенной разработки дико экономят
время разработчиков. Corona – это быстрое, удобное и
гибкое средство разработки. Отличия кода под ту или иную
платформу минимальны и заключаются непосредственно в
особенностях различий самих платформ (их
возможностей).
12. Быстрая разработка
На Corona разрабатывать действительно быстро, в этом
способствуют быстрый и достаточно точный симулятор,
автоматический перезапуск симулятора при изменении
файлов проекта (отключаемо), отсутствие компиляции для
запуска в симуляторе, быстрая компиляция iOS и Android
сборок без участия Xcode. Даже когда в проекте возникает
ошибка, приложение не рушится, давая в некоторых
случаях возможность нормально продолжить работу.
Можно использовать любой текстовый редактор.
Мой выбор – ZeroBrane Studio.
13. Зоопарк экранов
Основная проблема при кроссплатформенной разработке это обилие
различных разрешений экранов устройств.
Решение в использовании Content Scaling, но не обычного, а хитрого.
При обычном масштабировании задаётся виртуальная область
координат экрана, обычно равная разрешению экрана iPhone 3GS –
320x480px, а дальше это дело растягивается под каждый экран.
Основные режимы это:
ZoomStretch – занимает весь экран, не сохраняет
пропорции
ZoomEven – занимает весь экран, сохраняет пропорции
Letterbox – занимает не весь экран, сохраняет
пропорции
14. Зоопарк экранов
Иногда, когда времени особенно нет, используется
ZoomStretch на весь экран. Для некоторых приложений это
работает. Но по хорошему всегда нужно использовать
Letterbox.
Если с этим ничего не делать, то, например, игра
написанная под iPhone будет иметь чёрные полосы с
мусором по длинным краям экрана на iPad.
Типичное решение – расширить фон так чтобы эта чернота
исчезла. Но это не решает другой проблемы – такие
приложения становятся немного размытыми на iPad из-за
нецелого фактора масштабирования.
15. Зоопарк экранов
Тогда на помощь приходит хитрость. В файле config.lua
добавить код, который бы понимал с каким соотношением
сторон мы имеем дело и выбирал бы соответствующие
width и height – 320x480 для iPhone и 384x512 для iPad.
При этом код должен уметь позиционировать свои
элементы динамически – с привязкой к углам и краям
экрана.
16. Config.lua 1
local w, h = display.pixelWidth, display.pixelHeight
if w >= 480 then
w = w * 0.5
h = h * 0.5
end
if w >= 480 then
w = w * 0.5
h = h * 0.5
end
application = {
content = {
width = w, height = h,
scale = 'letterbox',
imageSuffix = {['@2x'] = 1.2, ['@4x'] = 2.5},
fps = 60
}}
17. Config.lua 2
local cw, ch = 320, 480
local w, h = display.pixelWidth, display.pixelHeight
if w == 768 and h == 1024 then
cw, ch = 384, 512
elseif w == 600 and h == 1024 then
cw, ch = 400, 512
elseif w == 720 and h == 1280 then
cw, ch = 360, 640
end
application = {
content = {
width = cw, height = ch,
scale = 'letterbox',
imageSuffix = {['@2x'] = 1.2, ['@4x'] = 2.5},
fps = 60
}}
18. Config.lua 3
iPad является самым «квадратным» среди мобильных
устройств, с соотношением сторон 4:3. Все остальные
устройства более широкие и, получается, при этой схеме не
происходит масштабирования вверх, только downsize.
Это, например, отлично подходит для e-books.
2776х1536px – размер фонового изображения @4x, который
покроит все устройства при данной конфигурации.
application = {
content = {
width = 384, height = 512,
scale = 'letterbox',
imageSuffix = {['@2x'] = 1.2, ['@4x'] = 2.5},
fps = 60
}}
20. Кнопка назад
Интегрирование в Storyboard
Runtime:addEventListener('key', function (event)
if event.keyName == 'back' and event.phase == 'down' then
local scene= storyboard.getScene(storyboard.getCurrentSceneName())
if scene and type(scene.backPressed) == 'function' then
scene:backPressed()
return true
end
end
end)
function scene:backPressed()
storyboard.gotoScene('scenes.menu', 'slideRight', 500)
end
22. Плох тот разработчик,
что не мечтает сделать свой фреймворк
Важным фактором для скорости разработки является
наличие такого мини фреймворка - набора
вспомогательных функций, целых кусков кода или просто
подходов к разработке сильно ускоряет процесс.
Кнопки
SlideView, Parallax
Обёртки над newImage и newText
Меню выбора уровня
Диалоговые окна
ООП
И т.д.
23. Special thanks, Books
Barry Swan aka Rakoonic http://www.playlevel.com/
Nevin Flanagan aka Alestane - Corona SDK Hotshot
http://
www.packtpub.com/corona-software-development-kit-hotshot/b
Dr. Burton - Mobile App Development with Corona
http
://www.burtonsmediagroup.com/books/mobile-app-developmen
/
https://github.com/Lerg
24. Спасибо за внимание!
Сергей Лалов – Spiral Code Studio
@SergeyLerg
08.12.2013
E-mail для вопросов и предложений о сотрудничестве
sergey.lalov@gmail.com
IRC Чат: freenode.net #corona Lerg
Поболтать можно тут
http://www.coronalabs.com/community/irc/
http://coronalabs.com