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