24
Corona SDK: Быстрая разработка кроссплатформенных игр Сергей Лалов – Spiral Code Studio @SergeyLerg 08.12.2013

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

Embed Size (px)

DESCRIPTION

 

Citation preview

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

Corona SDK: Быстрая разработка кроссплатформенных игр

Сергей Лалов – Spiral Code Studio@SergeyLerg

08.12.2013

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

Что такое Corona SDK

SDK, позволяющее создавать кроссплатформенные приложенияПоддержка Android и iOS (скоро Windows)Возможность разработки на Windows и Mac OS X2D графика (даже 2.5D)Язык LuaБыстрый и удобный симуляторКомпиляция без запуска Xcode

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

Lua – это хорошо!

Хорошо зарекомендованныйПростой, легкость освоенияКроссплатформенный и встраиваемыйДоступно много кодаДинамическийМалый вес в приложении 1.4MBНа iOS нельзя JIT – LuaJIT, JavaScript V8

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

На что способна Corona?

Довольно высокая производительностьДостаточно обширный APIУ Starter версии наиболее значимое отличие – это только лишь отсутствие внутриигровых покупокEnterprise версия позволяет добавлять собственные плагины

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

Сторонние 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И др.

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

Миф #1 - Disclaimer

Нет, мне не заплатили, чтобы я рассказывал про корону.Она мне правда нравится.

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

Миф #2 – Corona медленная,потомучто кроссплатформенная

Ядро короны написано на чистом С++ и OpenGL Для системных вызовов написаны обёртки наObjective-C и JavaLua используется только для дополнительных библиотек вроде Widgets, Timers и TransitionsПо факту Lua очень редко является узким звеном у приложения

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

Сравнение производительности с Unity2D

Создание спрайтов по нажатию на экранСпрайт 128x128px 16 кадров png Тестирование на iPad 2Unity2D - 3800 объектов 10fps, 1650 - 25fpsCorona - 4200 объектов 10fps, 1750 - 25fps

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

Миф #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 и др.

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

Миф #4 – Corona только лишьдля игр

WidgetsМожно создавать своиПроблемы с нативными элементами есть, но они решаемыПо сути ограничение только в фантазии

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

Одновременная разработкадля iOS и Android

Для подавляющего большинства проектов нет смысла отдельно создавать версии под каждую из платформ. Средства кроссплатформенной разработки дико экономят время разработчиков. Corona – это быстрое, удобное и гибкое средство разработки. Отличия кода под ту или иную платформу минимальны и заключаются непосредственно в особенностях различий самих платформ (их возможностей).

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

Быстрая разработкаНа Corona разрабатывать действительно быстро, в этом способствуют быстрый и достаточно точный симулятор, автоматический перезапуск симулятора при изменении файлов проекта (отключаемо), отсутствие компиляции для запуска в симуляторе, быстрая компиляция iOS и Android сборок без участия Xcode. Даже когда в проекте возникает ошибка, приложение не рушится, давая в некоторых случаях возможность нормально продолжить работу.Можно использовать любой текстовый редактор.Мой выбор – ZeroBrane Studio.

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

Зоопарк экрановОсновная проблема при кроссплатформенной разработке это обилие различных разрешений экранов устройств.Решение в использовании Content Scaling, но не обычного, а хитрого.При обычном масштабировании задаётся виртуальная область координат экрана, обычно равная разрешению экрана iPhone 3GS – 320x480px, а дальше это дело растягивается под каждый экран.Основные режимы это:

ZoomStretch – занимает весь экран, не сохраняет пропорцииZoomEven – занимает весь экран, сохраняет пропорцииLetterbox – занимает не весь экран, сохраняет пропорции

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

Зоопарк экрановИногда, когда времени особенно нет, используется ZoomStretch на весь экран. Для некоторых приложений это работает. Но по хорошему всегда нужно использовать Letterbox.Если с этим ничего не делать, то, например, игра написанная под iPhone будет иметь чёрные полосы с мусором по длинным краям экрана на iPad.Типичное решение – расширить фон так чтобы эта чернота исчезла. Но это не решает другой проблемы – такие приложения становятся немного размытыми на iPad из-за нецелого фактора масштабирования.

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

Зоопарк экрановТогда на помощь приходит хитрость. В файле config.lua добавить код, который бы понимал с каким соотношением сторон мы имеем дело и выбирал бы соответствующие width и height – 320x480 для iPhone и 384x512 для iPad.

При этом код должен уметь позиционировать свои элементы динамически – с привязкой к углам и краям экрана.

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

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

}}

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

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

}}

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

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, который покроит все устройства при данной конфигурации.

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

Опорные координаты_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

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

Кнопка назадИнтегрирование в 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

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

Оптимизация

Кэш переменныхИспользование простых for i = n, m do циклыВыравнивание изображений до 2^nПотребление памяти и её измерениеСборщик мусораМинимизируйте количество групп

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

Плох тот разработчик,что не мечтает сделать свой фреймворк

Важным фактором для скорости разработки является наличие такого мини фреймворка - набора вспомогательных функций, целых кусков кода или просто подходов к разработке сильно ускоряет процесс.

КнопкиSlideView, ParallaxОбёртки над newImage и newTextМеню выбора уровняДиалоговые окнаООПИ т.д.

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

Спасибо за внимание!Сергей Лалов – Spiral Code Studio

@SergeyLerg08.12.2013

E-mail для вопросов и предложений о сотрудничестве

[email protected]

IRC Чат: freenode.net #corona LergПоболтать можно тут

http://www.coronalabs.com/community/irc/

http://coronalabs.com