Buscar..


Introducción

Un sistema, del patrón entidad-componente-sistema, proporciona alcance global, servicios y administración a las clases de componentes. Proporciona API públicas (métodos y propiedades) para las clases de componentes. Se puede acceder a un sistema a través del elemento de escena, y puede ayudar a los componentes a interactuar con la escena global.

Por ejemplo, el sistema de la cámara gestiona todas las entidades con el componente de la cámara, controlando qué cámara es la cámara activa.

Parámetros

Parámetro Detalles
datos Datos proporcionados por el esquema disponible a través de manejadores y métodos.
el Referencia a <a-scene>
esquema Se comporta igual que los esquemas de componentes. Analiza los datos.

Observaciones

Metodos

Un sistema, como un componente, define los manejadores de ciclo de vida. También puede definir métodos destinados a ser API pública.

Método Descripción
en eso Se llama una vez cuando se inicializa el sistema. Se utiliza para inicializar.
pausa Llamado cuando la escena se detiene. Se utiliza para detener el comportamiento dinámico.
jugar Llamado cuando la escena comienza o se reanuda. Se utiliza para iniciar el comportamiento dinámico.
garrapata Si está definido, se llamará en cada tic del bucle de renderizado de la escena.

Registro de un sistema

Un sistema se registra de manera similar a un componente A-Frame.

Si el nombre del sistema coincide con el nombre de un componente, entonces el componente tendrá una referencia al sistema como este.sistema:

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);
  }
});

Accediendo a un sistema

Se puede acceder a un sistema instanciado a través de la escena:

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

Se puede acceder a los prototipos registrados del sistema a través de AFRAME.systems .

Separación de lógica y datos

Los sistemas pueden ayudar a separar la lógica y el comportamiento de los datos si se desea. Dejamos que los sistemas se encarguen del trabajo pesado, y los componentes solo se preocupan por la administración de sus datos a través de sus métodos de ciclo de vida:

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);
  }
});

Recopilación de todos los componentes de un sistema

No hay una API estricta para definir cómo los sistemas administran los componentes. Un patrón común es que los componentes se suscriban al sistema. El sistema entonces tiene referencias a todos sus componentes:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow