aframe
Système
Recherche…
Introduction
Un système, du modèle entité-composant-système, fournit une portée, des services et une gestion globaux à des classes de composants. Il fournit des API publiques (méthodes et propriétés) pour les classes de composants. Un système est accessible via l'élément de scène et peut aider les composants à interagir avec la scène globale.
Par exemple, le système de caméra gère toutes les entités avec le composant caméra, contrôlant quelle caméra est la caméra active.
Paramètres
Paramètre | Détails |
---|---|
Les données | Données fournies par le schéma disponible entre les gestionnaires et les méthodes |
el | Référence à <a-scene> |
schéma | Se comporte comme les schémas de composants. Analyse des données. |
Remarques
Méthodes
Un système, comme un composant, définit des gestionnaires de cycle de vie. Il peut également définir des méthodes destinées à être des API publiques.
Méthode | La description |
---|---|
init | Appelé une fois lorsque le système est initialisé. Utilisé pour initialiser. |
pause | Appelé lorsque la scène s'arrête. Utilisé pour arrêter le comportement dynamique |
jouer | Appelé lorsque la scène commence ou reprend. Utilisé pour démarrer le comportement dynamique. |
cocher | Si elle est définie, elle sera appelée à chaque coche de la boucle de rendu de la scène. |
Enregistrement d'un système
Un système est enregistré de la même manière qu'un composant A-Frame.
Si le nom du système correspond à un nom de composant, le composant aura alors une référence au système sous la forme 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);
}
});
Accéder à un système
Un système instancié est accessible via la scène:
document.querySelector('a-scene').systems[systemName];
Les prototypes de systèmes enregistrés sont accessibles via AFRAME.systems
.
Séparation de la logique et des données
Les systèmes peuvent aider à séparer la logique et le comportement des données si vous le souhaitez. Nous permettons aux systèmes de gérer les charges lourdes et les composants ne se soucient que de la gestion de leurs données grâce à ses méthodes de cycle de vie:
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);
}
});
Rassembler tous les composants d'un système
Il n'y a pas d'API stricte pour définir comment les systèmes gèrent les composants. Un schéma courant consiste à faire en sorte que les composants s'abonnent au système. Le système a alors des références à tous ses composants:
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);
}
});