Поиск…


Вступление

Система, структура системы-компонента-системы, предоставляет глобальные возможности, службы и управление классам компонентов. Он предоставляет общедоступные API (методы и свойства) для классов компонентов. Доступ к системе возможен через элемент сцены и может помочь компонентам взаимодействовать с глобальной сценой.

Например, система камеры управляет всеми объектами с компонентом камеры, контролируя, какая камера является активной камерой.

параметры

параметр подробности
данные Данные, предоставленные схемой, доступные через обработчики и методы
эль Ссылка на <a-scene>
схема Работает так же, как и схемы компонентов. Парсы к данным.

замечания

МЕТОДЫ

Система, как компонент, определяет обработчики жизненного цикла. Он также может определять методы, предназначенные для публичного API.

метод Описание
в этом Вызывается один раз, когда система инициализируется. Используется для инициализации.
Пауза Вызывается, когда сцена останавливается. Используется для остановки динамического поведения.
играть Вызывается, когда сцена начинается или возобновляется. Используется для запуска динамического поведения.
поставить галочку Если определено, будет вызываться на каждом тике цикла рендеринга сцены.

Регистрация системы

Система зарегистрирована аналогично компоненту A-Frame.

Если имя системы совпадает с именем компонента, то компонент будет иметь ссылку на систему как this.system:

AFRAME.registerSystem('my-component', {
  schema: {},  // System schema. Parses into `this.data`.
  init: function () {
    // Called on scene initialization.
  },
  // Other handlers and methods.
});
AFRAME.registerComponent('my-component', {
  init: function () {
    console.log(this.system);
  }
});

Доступ к системе

Доступ к инстанцированной системе можно получить через сцену:

document.querySelector('a-scene').systems[systemName];

Прототипы зарегистрированных систем можно получить через AFRAME.systems .

Разделение логики и данных

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

AFRAME.registerSystem('my-component', {
  createComplexObject: function (data) {
    // Do calculations and stuff with data.
    return new ComplexObject(data);
  }
});

AFRAME.registerComponent('my-component', {
  init: function () {
    this.myObject = null;
  },

  update: function () {
    // Do stuff with `this.data`.
    this.myObject = this.system.createComplexObject(this.data);
  }
});

Сбор всех компонентов системы

Существует строгий API для определения того, как системы управляют компонентами. Общая схема состоит в том, чтобы компоненты подписались на систему. Затем система имеет ссылки на все ее компоненты:

AFRAME.registerSystem('my-component', {
  init: function () {
    this.entities = [];
  },

  registerMe: function (el) {
    this.entities.push(el);
  },

  unregisterMe: function (el) {
    var index = this.entities.indexOf(el);
    this.entities.splice(index, 1);
  }
});

AFRAME.registerComponent('my-component', {
  init: function () {
    this.system.registerMe(this.el);
  },

  remove: function () {
    this.system.unregisterMe(this.el);
  }
});


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow