Lime.JS

22
LimeJS — фреймворк для разработки HTML5 игр Юрийчук Павел Ciklum Проект BoosterMedia

description

My presenation about Lime.JS framework, it's architecture and internals

Transcript of Lime.JS

Page 1: Lime.JS

LimeJS — фреймворк для разработки HTML5 игр

Юрийчук ПавелCiklum

Проект BoosterMedia

Page 2: Lime.JS

О себе

● Flex/Flash developer, Сasino games framework в 2k-group

● Mobile games developer, Сasual games в Ciklum

● Как найти :● Facebook● Twitter● gmail

Page 3: Lime.JS

Плюшки

● Архитектура● Обьекты на сцене и взаимодействие между

ними● Renderers и как они работают● События● Инструментарий● Кое что еще ;)

Page 4: Lime.JS

LimeJS

● JavaScript framework для разработки кросс-платформенных игр на основе google closures library

● Разработчик — компания DigitalFruit ● Первый публичный коммит в github —

19 января 2011● https://github.com/digitalfruit/limejs● http://www.limejs.com/● API Docs

Page 5: Lime.JS

Архитектура

● Легко расширяемая функциональность● Кросс-платформенность● Отделена отрисовка обьектов● Эффективность работы отрисовщика

Page 6: Lime.JS
Page 7: Lime.JS

Пользовательский интерфейс

● Структура UI отделена от фактического представления, навигация по ней:● AppendChild()● RemoveChild()● RemoveChildAt()● Children_[]/getParent()

● Добавление и удаление слушателей событий:● Goog.events.listen/goog.events.unlisten● AddEventListener/removeEventListener

Page 8: Lime.JS

Отрисовка объектов

● Поддерживаются следующие типы отрисовщиков UI:● DOM = HTML + CSS3● Canvas = все отрисовываем в объектах Сanvas● WebGL - на стадии разработки и не стабилен

● При изменении свойств объекта он помечается как “dirty” что приводит к его перерисовке

Page 9: Lime.JS

Пример: Казаки

Page 10: Lime.JS

Как работает отрисовка

Page 11: Lime.JS

Profit!

● Отрисовывается только то, что было изменено

● Одинаковый подход как для простых так и для сложных обьектов

● Независимость от выбранного отрисовщика

Page 12: Lime.JS

Profit!

● Отрисовывается только то, что было изменено

● Одинаковый подход как для простых так и для сложных обьектов

● Независимость от выбранного отрисовщика

Page 13: Lime.JS

События

● Один и тот же обработчик на много событий сразу ['touchstart','touchend','touchcancel','touchmove']

● По умолчанию this установлен на event.target● При использовании Canvas не надо менять код !

Page 14: Lime.JS

Примеры

● goog.events.listen(heroesContainer,['touchstart','mousedown'],this.handleHeroClick_,false,this)

● heroesContainer.addEventListener('mousedown', this.handleHeroClick_,false,this)

Page 15: Lime.JS

Еще раз о Rendering'e

● Для чего лучше DOM:● Качественный scale и другие транфсормации● IOS - скорость СSS3 трансформаций выше чем js code +

style● Нет ограничений на размер области отрисовки

● Для чего Canvas:● Быстрее scaling, но его качество хуже● Быстрее отрисовка большого множества обьектов● Есть ограниченя на размер области отрисовки

Page 16: Lime.JS

Примеры

● Пользовательский интерфейс лучше рисовать через DOM — почти наверняка будут слайдеры, эффекты

● Отрисовка сцены игры — лучше в Canvas, если вас устраивает скорость

● Canvas — позволяет сделять скриншот на стороне клиента!

Page 17: Lime.JS

Инструменты

● Скрипт lime.py● Init — инициализация фреймворка, скачивает

зависимости● Create — создать новый проект● Update — обновление зависимостей внутри

проекта● Compile — компиляция существующего, можно

создавать динамический прелоадер● Gensoy — внедрение json & css в проект, меньше

файлов

Page 18: Lime.JS

Box2D

● Порт С++ проекта http://box2d.org/ на JavaScript

● Исходники здесь● Интегрирован в LimeJS как third-party library,

скачивается на этапе инициализации● http://sourceforge.net/projects/box2d-js/ 2008

● https://github.com/thinkpixellab/pl/tree/master/src/box2d/collision

Page 19: Lime.JS

Box2D::JS::Features

● C++ полный список здесь● Коллизии и контакт объектов● Системы частиц● Моделирование механики в играх

Page 20: Lime.JS

Google closures library

● Автоматизированное управление завимостями

● XML — XPath, AJAX — xhrIo, JSON — native / json parser

● DataStructures● Array, Vector, Size, Coordinate

● Map, AVL-tree, Pool, Queue, Heap, Collection

● Templates

● Storage

● Cryptogrpahy

● Graphics

● i18n - internationalization

Page 21: Lime.JS

Что надо будет добавлять самому

● Загрузка ресурсов и их обработка● Обработку Spritesheet если у вас не

поддерживаемый генератор● Навигация а-ля getChildById/getElementById

и прочее● Компонент lime.ui.Scroller, lime.Layer и lime.Label— подлежат доработке напильником

● Звук для iOS — таблетка тут

Page 22: Lime.JS