SlideShare uma empresa Scribd logo
1 de 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 - 3700 объектов 10fps, 1450 - 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
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
}}
Опорные координаты
_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

Mais conteúdo relacionado

Mais de DevGAMM Conference

New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...DevGAMM Conference
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...DevGAMM Conference
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...DevGAMM Conference
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)DevGAMM Conference
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)DevGAMM Conference
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...DevGAMM Conference
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...DevGAMM Conference
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)DevGAMM Conference
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...DevGAMM Conference
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...DevGAMM Conference
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...DevGAMM Conference
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...DevGAMM Conference
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...DevGAMM Conference
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...DevGAMM Conference
 
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)DevGAMM Conference
 
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)DevGAMM Conference
 
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)DevGAMM Conference
 
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)DevGAMM Conference
 
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)DevGAMM Conference
 
How to game the Xbox system / Neil Holmes (Xbox)
How to game the Xbox system / Neil Holmes (Xbox)How to game the Xbox system / Neil Holmes (Xbox)
How to game the Xbox system / Neil Holmes (Xbox)DevGAMM Conference
 

Mais de DevGAMM Conference (20)

New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
New PR Tech and AI Tools for 2023: A Game Changer for Outreach / Kirill Perev...
 
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
Playable Ads - Revolutionizing mobile games advertising / Jakub Kukuryk (Popc...
 
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
Creative Collaboration: Managing an Art Team / Nastassia Radzivonava (Glera G...
 
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
From Local to Global: Unleashing the Power of Payments / Jan Kuhlmannn (Xsolla)
 
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
Strategies and case studies to grow LTV in 2023 / Julia Iljuk (Balancy)
 
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
Why is ASO not working in 2023 and how to change it? / Olena Vedmedenko (Keya...
 
How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...How to increase wishlists & game sales from China? Growth marketing tactics &...
How to increase wishlists & game sales from China? Growth marketing tactics &...
 
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
Turkish Gaming Industry and HR Insights / Mustafa Mert EFE (Zindhu)
 
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
Building an Awesome Creative Team from Scratch, Capable of Scaling Up / Sasha...
 
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
Seven Reasons Why Your LiveOps Is Not Performing / Alexander Devyaterikov (Be...
 
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
The Power of Game and Music Collaborations: Reaching and Engaging the Masses ...
 
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...Branded Content: How to overcome players' immunity to advertising / Alex Brod...
Branded Content: How to overcome players' immunity to advertising / Alex Brod...
 
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
Resurrecting Chasm: The Rift - A Source-less Remastering Journey / Gennadii P...
 
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
How NOT to do showcase events: Behind the scenes of Midnight Show / Andrew Ko...
 
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
Launching a title in Asia Pacific and China / Maxim Chuvalov (Wargaming)
 
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
5 things I wish I knew before becoming a VFX Artist / Paulina Grigonis (Tuatara)
 
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
Pitching with Killer Demos / Jaroslav Stacevič (Nordcurrent)
 
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
How to Craft the Perfect Pitch / Nathan Sölbrandt ( Xsolla)
 
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
Making Games We Like aka Personal Biases in Game Design / Rok Mioč (Outfit7)
 
How to game the Xbox system / Neil Holmes (Xbox)
How to game the Xbox system / Neil Holmes (Xbox)How to game the Xbox system / Neil Holmes (Xbox)
How to game the Xbox system / Neil Holmes (Xbox)
 

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 }}
  • 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