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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow