Skip to content

Development Basics

vasili.kostin edited this page Aug 22, 2021 · 19 revisions

Общая информация для Javascript разработчика

Основные понятия Thing-Editor

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

В папке каждого проекта находится файл настроек проекта thing-project.json, исходный код игровых компонентов, и игровые ресурсы.

Главные модули из которых состоит игра - это сцены, префабы, фейдер и модальные объекты. Каждое из перечисленных понятий, в конечном счете, является конструкцией, собранной из строительных блоков - Компонентов. Один из компонентов при этом является корневым, а остальные вложены в него в виде дерева, как дочерние объекты. Основная задача Thing-Editor - редактирование таких, иерархических структур, и редактирование свойств каждого строительного блока - компонента, содержащегося в такой структуре.

Игровая сцена

Игровая сцена - главный блок игры отображаемый на экране. Каждая игровая сцена может являться как непосредственно игровым уровнем, где происходят главные игровые события, так и игровым меню, заставочным экраном, или другим отдельным местом действия. В каждый момент времени на экране отображается только одна сцена, игрок переходит между сценами в процессе исполнения игры. Создание/удаление/открытие существующих сцен осуществляется в Окне сцен. Содержимое каждой сцены хранится в виде файла с расширением .scene.json в папке проекта /scenes/.

Префаб

Префаб - игровой блок (кусок сцены, заготовка), сохраненный в библиотеку префабов под определенным именем. Префаб состоит из одного корневого компонента и вложенных в него дочерних. Является заготовкой для многократного использования в коде игры или движком игры. Создание/удаление/редактирование существующих префабов осуществляется в Окне префабов. В игре, префабы используются как через специальные компоненты (такие как Spawner или PrefabReference, которые ссылаются на префаб, указанный в редактируемых свойствах), так и из javascript кода (метод Lib.loadPrefab).

Содержимое каждого префаба хранится в виде файла с расширением .prefab.json в папке проекта /prefabs/.

Фейдер

Фейдер - эффект перехода между сценами. Фейдер представляет из себя Префаб, который автоматически добавляется на экран поверх сцены, перед переходом в новую сцену, и исчезает с экрана после того как новая сцена отобразилась на экране. Для обеспечения плавного перехода между сценами, фейдер должен содержать анимацию плавного появления (закрытия всей сцены непрозрачной областью), и анимацию плавного исчезновения, под которым новая сцена плавно откроется для игрока. Удаление с экрана текущей сцены и добавление новой сцены происходит в то время, когда фейдер полностью закрывает собой экран.

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

Подробнее про создание фейдеров.

Модальный объект

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

Модальные объекты используются для отображения игровых попапов, игровых сообщений. Так как появление попапа может быть непредсказуемым для происходящих на сцене действий, сцена под попапом замораживается. Для возможности такой полной заморозки сцены необходимо использовать Delay.delay метод для создания задержек, вместо стандартного Javascript метода setTimeout и SceneLinkedRequest для отправки сетевых запросов. При заморозке игровой сцены, последние тоже замораживаются.

Управление сценами и модальными объектами

Стек Сцен

Переход игрока между сценами в Thing-Engine основана на стеке сцен. При открытии новой сцены, текущая сцена не удаляется полностью, а скрывается с игрового экрана и помещается в стек, как верхнее значение. При закрытии же текущей сцены, из стека берется верхняя (последняя помещенная в него) сцена и отображается на экран. Таким образом игрок как бы углубляется в сцены вложенные друг в друга при открытии каждой новой сцены, и возвращается назад к корневой сцене при каждом закрытии текущей сцены. Корневая сцена не может быть закрыта. Для переходов между сценами используются методы game.showScene, game.closeCurrentScene, game.replaceScene, game.closeAllScenes, которые могут быть вызваны как из javascript, так и привязаны к нажатию кнопки на игровом экране (компонент Button onClick).

Жизненный цикл модального объекта

После того как модальный объект добавлен на экран вызовом метода game.showModal, он незамедлительно помещается на игровой экран и текущая сцена замораживается. Анимация плавного появления модального объекта, если она необходима, должна быть реализована в самом модальном объекте, путем оборачивания его или его видимых объектов в анимированные MovieClip компоненты. При скрытии модального объекта методом game.hideModal, игровая сцена немедленно размораживается, а модальный объект плавно удаляется с экрана, снижением его прозрачности alpha до нуля.

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

Жизненный цикл фейдера

При вызове перехода между сценами, фейдер добавляется на экран поверх сцены. Анимация плавного скрытия сцены должна быть реализована в самом фейдере, путем оборачивания его или его видимых объектов в анимированные MovieClip компоненты. После того, как скрытие сцены произошло, фейдер должен остановиться и вызвать метод game.faderShoot. При этом текущая сцена удаляется с экрана, новая сцена добавляется на экран, и происходит подгрузка ресурсов новой сцены. Как только ресурсы загружены, для фейдера вызывается метод gotoLabelRecursive('hide fader'), который запускает все анимации, имеющиеся в фейдере, с метки 'hide fader', метка должна указывать на анимацию скрытия фейдера, и в конце анимации должен быть вызван метод game.faderEnd, сообщающий о том, что фейдер может быть удален c экрана. Фейдер при этом немедленно удаляется.

Примеры реализации фейдеров можно найти в тестовом проекте thing-project-example, который устанавливается вместе с Thing-Editor в инструкции по установке.

<- Предыдущая страница Следующая страница ->

Связанные темы:

Разработка Custom компонентов

Компоненты

Clone this wiki locally