С.Лалов "corona sdk для разработки кроссплатформенных...
DESCRIPTION
TRANSCRIPT
Corona SDK: Быстрая разработка кроссплатформенных игр
Сергей Лалов – Spiral Code Studio@SergeyLerg
08.12.2013
Что такое Corona SDK
SDK, позволяющее создавать кроссплатформенные приложенияПоддержка Android и iOS (скоро Windows)Возможность разработки на Windows и Mac OS X2D графика (даже 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 ServicesIn-Apps: Apple, Google, Amazon, OUYAFlurry, ZIP, SQLite, JSON, LFS, Bit, Videos, MapsStoryboard, Transitions, Timers, Physics, JoysticksИ др.
Миф #1 - Disclaimer
Нет, мне не заплатили, чтобы я рассказывал про корону.Она мне правда нравится.
Миф #2 – Corona медленная,потомучто кроссплатформенная
Ядро короны написано на чистом С++ и OpenGL Для системных вызовов написаны обёртки наObjective-C и JavaLua используется только для дополнительных библиотек вроде Widgets, Timers и TransitionsПо факту Lua очень редко является узким звеном у приложения
Сравнение производительности с Unity2D
Создание спрайтов по нажатию на экранСпрайт 128x128px 16 кадров png Тестирование на iPad 2Unity2D - 3800 объектов 10fps, 1650 - 25fpsCorona - 4200 объектов 10fps, 1750 - 25fps
Миф #3 – На Corona нетдостойных игр
Corona Hall of Famehttp://www.coronalabs.com/halloffame/Fun Run, Major Magnet, Blast Monkeys, The Lost CityFreeze, 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 1local w, h = display.pixelWidth, display.pixelHeightif w >= 480 then w = w * 0.5 h = h * 0.5endif w >= 480 then w = w * 0.5 h = h * 0.5endapplication = { content = { width = w, height = h, scale = 'letterbox', imageSuffix = {['@2x'] = 1.2, ['@4x'] = 2.5}, fps = 60
}}
Config.lua 2local cw, ch = 320, 480local w, h = display.pixelWidth, display.pixelHeightif w == 768 and h == 1024 then cw, ch = 384, 512elseif w == 600 and h == 1024 then
cw, ch = 400, 512elseif w == 720 and h == 1280 then
cw, ch = 360, 640endapplication = { 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 widthdisplay.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 endend)
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 Hotshothttp://www.packtpub.com/corona-software-development-kit-hotshot/book
Dr. Burton - Mobile App Development with Coronahttp://www.burtonsmediagroup.com/books/mobile-app-development-with-corona-getting-started/
https://github.com/Lerg
Спасибо за внимание!Сергей Лалов – Spiral Code Studio
@SergeyLerg08.12.2013
E-mail для вопросов и предложений о сотрудничестве
IRC Чат: freenode.net #corona LergПоболтать можно тут
http://www.coronalabs.com/community/irc/
http://coronalabs.com