Genome2D — Начало начал

Скорее всего информацию в этой статье надо было дать одной из первых, но, как говорится, «лучше поздно чем не туда…»
Размышление вслух. Поехали.

В Genome2D используется компонентный подход.
Все дерево иерархии берет свое начало от root (Genome2D.root). Листьями (или узлами) этого дерева являются ноды (GNode).
Все компоненты для того, чтобы быть на сцене и/или как-то участвовать в ее жизни должны быть помещены в эти ноды. Не помещенный в дерево компонент никак не влияет на сцену. Также ноды могут содержать другие ноды — как и в Display list’e называемые детьми, но компонент в ноде может быть только один (на самом деле не один, но этого лучше не делать, чтобы избежать проблем). Итак, чтобы добавить компонент на сцену создаем сам компонент, создаем для него нод (GNode) и добавляем его к этому ноду, после добавляем этот нод в дерево сцены. И вот наш компонент на сцене.

В отличии от привычной для флеш разработчиков модели Display list’а и его компонентов тут все работает немного по другому. Например, трансформации любого вида НЕ применяются к компоненту напрямую, только к его ноду. Это позиция, вращение, масштабирование, цветовая коррекция, и даже видимость — все эти параметры задаются через нод в его свойстве transform. Тоже касается интерактивности. Все события мыши, а также события добавления/удаления со сцены надо слушать от нода. Как уже говорилось Genome2d не использует «родную» систему событий, вместо этого используются сигналы (в частности библиотека AS3Signals). Все сигналы можно легко узнать по префиксу ‘on’ (onMouseClick).
Подробней по полям и методам нода можно обратится в доку.

Каждый кадр класс genome2d вещает четыре события обновления и отрисовки — onPreUpdate, onPostUpdate, onPreRender, onPostRender (имена сигналов должны говорить сами за себя). Вещаются они в указанном порядке.
Сигнал onPreUpdate можно также использовать как enterFrame, он вызывается самым первым перед всеми обновлениями нодов и их рендеринге.
onPostRender вызывается последним после всех обновлений и отрисовке.

Если вы добавили в дерево комопненты для рендеринга, это не значит, что они появятся на экране. Ничего не отображается пока на сцене нету камеры. Класс отвечающий за камеру GCamera.
С помощью битовой маски можно настроить какие ноды камера будет отображать, а какие нет. Для этого в GNode есть поле cameraGroup, а в камере — mask.

Если (camera.mask & node.cameraGroup) != 0, тогда камера будет рендерить этот нод.

На сцене может быть несколько камер, будет отдельная статья по мультикамерам.
Чтобы понять, что такое камера представьте себе стол на котором лежат изображения и вы смотрите на этот стол через окошко и для того, чтобы увидеть другое изображение вам надо передвинуть это окошко. То есть, для того, чтобы создать иллюзию движения вы не двигаете деревом компонентов, вы двигаете окном через которое смотрите.

Пока больше не придумал чего написать. Надо сказать, что сейчас Genome2d активно развивается и почти каждый день выходят ночные билды в которых существующая функциональность меняется, добавляется новая и удаляется не нужная. Потому, обратная совместимость постепенно теряется.
Уверен, что к следующему релизу будет множество изменений в АПИ. Необязательно это будут какие то масштабные изменения, но уже сейчас вижу, что где то добавился третий обязательный параметр, где убрались какие то свойства и т.д.
Ну и конечно же фиксятся ошибки :)

Пока так. Если есть какие либо ошибки/неточности велком в комменты.

Поделиться в соц. сетях

Опубликовать в LiveJournal
Опубликовать в Google Plus
  • deep

    Занятно и даже очень, особенно радуют тесты скорости. А про открытие кода пока ничего не слышно?

  • VirtualMaestro

    Пока нет, но сказал, что как только так сразу — в планах есть.