SlideShare a Scribd company logo
1 of 24
Corona SDK: Быстрая разработка
кроссплатформенных игр
Сергей Лалов – Spiral Code Studio
@SergeyLerg
08.12.2013
Что такое Corona SDK
SDK, позволяющее создавать кроссплатформенные
приложения
Поддержка Android и iOS (скоро Windows)
Возможность разработки на Windows и Mac OS X
2D графика (даже 2.5D)
Язык Lua
Быстрый и удобный симулятор
Компиляция без запуска Xcode
Lua – это хорошо!
Хорошо зарекомендованный
Простой, легкость освоения
Кроссплатформенный и встраиваемый
Доступно много кода
Динамический
Малый вес в приложении 1.4MB
На iOS нельзя JIT – LuaJIT, JavaScript V8
На что способна Corona?
Довольно высокая производительность
Достаточно обширный API
У Starter версии наиболее значимое отличие – это
только лишь отсутствие внутриигровых покупок
Enterprise версия позволяет добавлять собственные
плагины
Сторонние 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
И др.
Миф #1 - Disclaimer
Нет, мне не заплатили, чтобы я рассказывал про корону.
Она мне правда нравится.
Миф #2 – Corona медленная,
потомучто кроссплатформенная
Ядро короны написано на чистом С++ и OpenGL
Для системных вызовов написаны обёртки на
Objective-C и Java
Lua используется только для дополнительных
библиотек вроде Widgets, Timers и Transitions
По факту Lua очень редко является узким звеном у
приложения
Сравнение производительности
с Unity2D
Создание спрайтов по нажатию на экран
Спрайт 128x128px 16 кадров png
Тестирование на iPad 2
Unity2D - 3800 объектов 10fps, 1650 - 25fps
Corona - 4200 объектов 10fps, 1750 - 25fps
Миф #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 и др.
Миф #4 – Corona только лишь
для игр
Widgets
Можно создавать свои
Проблемы с нативными элементами есть, но они
решаемы
По сути ограничение только в фантазии
Одновременная разработка
для iOS и Android
Для подавляющего большинства проектов нет смысла
отдельно создавать версии под каждую из платформ.
Средства кроссплатформенной разработки дико экономят
время разработчиков. Corona – это быстрое, удобное и
гибкое средство разработки. Отличия кода под ту или иную
платформу минимальны и заключаются непосредственно в
особенностях различий самих платформ (их
возможностей).
Быстрая разработка
На Corona разрабатывать действительно быстро, в этом
способствуют быстрый и достаточно точный симулятор,
автоматический перезапуск симулятора при изменении
файлов проекта (отключаемо), отсутствие компиляции для
запуска в симуляторе, быстрая компиляция iOS и Android
сборок без участия Xcode. Даже когда в проекте возникает
ошибка, приложение не рушится, давая в некоторых
случаях возможность нормально продолжить работу.
Можно использовать любой текстовый редактор.
Мой выбор – ZeroBrane Studio.
Зоопарк экранов
Основная проблема при кроссплатформенной разработке это обилие
различных разрешений экранов устройств.
Решение в использовании Content Scaling, но не обычного, а хитрого.
При обычном масштабировании задаётся виртуальная область
координат экрана, обычно равная разрешению экрана iPhone 3GS –
320x480px, а дальше это дело растягивается под каждый экран.
Основные режимы это:
ZoomStretch – занимает весь экран, не сохраняет
пропорции
ZoomEven – занимает весь экран, сохраняет пропорции
Letterbox – занимает не весь экран, сохраняет
пропорции
Зоопарк экранов
Иногда, когда времени особенно нет, используется
ZoomStretch на весь экран. Для некоторых приложений это
работает. Но по хорошему всегда нужно использовать
Letterbox.
Если с этим ничего не делать, то, например, игра
написанная под iPhone будет иметь чёрные полосы с
мусором по длинным краям экрана на iPad.
Типичное решение – расширить фон так чтобы эта чернота
исчезла. Но это не решает другой проблемы – такие
приложения становятся немного размытыми на iPad из-за
нецелого фактора масштабирования.
Зоопарк экранов
Тогда на помощь приходит хитрость. В файле config.lua
добавить код, который бы понимал с каким соотношением
сторон мы имеем дело и выбирал бы соответствующие
width и height – 320x480 для iPhone и 384x512 для iPad.
При этом код должен уметь позиционировать свои
элементы динамически – с привязкой к углам и краям
экрана.
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
}}
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
}}
Config.lua 3
application = {
content = {
width = 384, height = 512,
scale = 'letterbox',
imageSuffix = {['@2x'] = 1.2, ['@4x'] = 2.5},
fps = 60
}}
iPad является самым «квадратным» среди мобильных
устройств, с соотношением сторон 4:3. Все остальные
устройства более широкие и, получается, при этой схеме не
происходит масштабирования вверх, только downsize.
Это, например, отлично подходит для e-books.
2776х1536px – размер фонового изображения @4x, который
покроит все устройства при данной конфигурации.
Опорные координаты
_W = display.contentWidth  -- Virtual width
_H = display.contentHeight -- Virtual height
_T = display.screenOriginY -- Top
_L = display.screenOriginX -- Left
_R = display.viewableContentWidth - _L  -- Right
_B = display.viewableContentHeight - _T -- Bottom
 
_SW = _R - _L -- Screen width in virtual coordinate system
_SH = _B - _T -- Screen height in virtual coordinate system
 
_CX = _W / 2 – Screen center
_CY = _H / 2
display.pixelWidth  -- Device native width
display.pixelHeight -- Device native height
Кнопка назад
Интегрирование в 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
Оптимизация
Кэш переменных
Использование простых for i = n, m do циклы
Выравнивание изображений до 2^n
Потребление памяти и её измерение
Сборщик мусора
Минимизируйте количество групп
Плох тот разработчик,
что не мечтает сделать свой фреймворк
Важным фактором для скорости разработки является
наличие такого мини фреймворка - набора
вспомогательных функций, целых кусков кода или просто
подходов к разработке сильно ускоряет процесс.
Кнопки
SlideView, Parallax
Обёртки над newImage и newText
Меню выбора уровня
Диалоговые окна
ООП
И т.д.
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
Спасибо за внимание!
Сергей Лалов – 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

More Related Content

Similar to С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014

Интерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровИнтерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровАгентство AlterEGO
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решенияВладимир Кожаев
 
Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновЕкатерина Макарова
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Эльвина Сакаева
 
Разработка мобильных приложений под iOS
Разработка мобильных приложений под iOSРазработка мобильных приложений под iOS
Разработка мобильных приложений под iOSSCINO
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8
 Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8 Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8
Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8DevGAMM Conference
 
Разработка мобильных приложений под Android на примере детских мобильных прил...
Разработка мобильных приложений под Android на примере детских мобильных прил...Разработка мобильных приложений под Android на примере детских мобильных прил...
Разработка мобильных приложений под Android на примере детских мобильных прил...tabtabus
 
METRO. Дизайн для Windows Phone
METRO. Дизайн для Windows PhoneMETRO. Дизайн для Windows Phone
METRO. Дизайн для Windows PhoneNikita Lukianets
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Fwdays
 
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apDneprCiklumEvents
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET CoreAndrew Gubskiy
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера
5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера 5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера
5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера NanoJam.ru
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)Alexander Bausk
 

Similar to С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014 (20)

Интерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центровИнтерактивные карты планировок на сайтах торговых центров
Интерактивные карты планировок на сайтах торговых центров
 
игровая логика, проблемы и решения
игровая логика, проблемы и решенияигровая логика, проблемы и решения
игровая логика, проблемы и решения
 
Xe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леоновXe4 launch мобильная разработка всеволод_леонов
Xe4 launch мобильная разработка всеволод_леонов
 
Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)Особенности тестирования мобильных приложений (Android, iOS)
Особенности тестирования мобильных приложений (Android, iOS)
 
Zwcad+ 2014
Zwcad+ 2014Zwcad+ 2014
Zwcad+ 2014
 
Разработка мобильных приложений под iOS
Разработка мобильных приложений под iOSРазработка мобильных приложений под iOS
Разработка мобильных приложений под iOS
 
Mobile credentials
Mobile credentialsMobile credentials
Mobile credentials
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8
 Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8 Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8
Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8
 
Разработка мобильных приложений под Android на примере детских мобильных прил...
Разработка мобильных приложений под Android на примере детских мобильных прил...Разработка мобильных приложений под Android на примере детских мобильных прил...
Разработка мобильных приложений под Android на примере детских мобильных прил...
 
METRO. Дизайн для Windows Phone
METRO. Дизайн для Windows PhoneMETRO. Дизайн для Windows Phone
METRO. Дизайн для Windows Phone
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
 
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_apSergey Khlopenov tools for_development_cross_platform_mobile_ap
Sergey Khlopenov tools for_development_cross_platform_mobile_ap
 
Микросервисы в .NET Core
Микросервисы в .NET CoreМикросервисы в .NET Core
Микросервисы в .NET Core
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера
5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера 5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера
5 бесплатных программ для начинающих, чтобы сделать модель для 3D принтера
 
Diplom 1
Diplom 1Diplom 1
Diplom 1
 
[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)[RU] Connecting AutoCAD and Python (by Alex Bausk)
[RU] Connecting AutoCAD and Python (by Alex Bausk)
 

More from it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 

More from it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

С.Лалов "Corona SDK для разработки кроссплатформенных приложений", DUMP-2014

  • 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 - 4200 объектов 10fps, 1750 - 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 application = { content = { width = 384, height = 512, scale = 'letterbox', imageSuffix = {['@2x'] = 1.2, ['@4x'] = 2.5}, fps = 60 }} iPad является самым «квадратным» среди мобильных устройств, с соотношением сторон 4:3. Все остальные устройства более широкие и, получается, при этой схеме не происходит масштабирования вверх, только downsize. Это, например, отлично подходит для e-books. 2776х1536px – размер фонового изображения @4x, который покроит все устройства при данной конфигурации.
  • 19. Опорные координаты _W = display.contentWidth  -- Virtual width _H = display.contentHeight -- Virtual height _T = display.screenOriginY -- Top _L = display.screenOriginX -- Left _R = display.viewableContentWidth - _L  -- Right _B = display.viewableContentHeight - _T -- Bottom   _SW = _R - _L -- Screen width in virtual coordinate system _SH = _B - _T -- Screen height in virtual coordinate system   _CX = _W / 2 – Screen center _CY = _H / 2 display.pixelWidth  -- Device native width display.pixelHeight -- Device native height
  • 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
  • 21. Оптимизация Кэш переменных Использование простых for i = n, m do циклы Выравнивание изображений до 2^n Потребление памяти и её измерение Сборщик мусора Минимизируйте количество групп
  • 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