Upload
devgamm-conference
View
2.574
Download
5
Embed Size (px)
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
Citation preview
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И др.
Миф #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Меню выбора уровняДиалоговые окнаООПИ т.д.
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