Corona SDK: Fast development of cross-platform games

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

description

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

Transcript of Corona SDK: Fast development of cross-platform games

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 - 3700 объектов 10fps, 1450 - 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Меню выбора уровняДиалоговые окнаООПИ т.д.

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

@SergeyLerg08.12.2013

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

[email protected]

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

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

http://coronalabs.com