Ricerca…


introduzione

Un sistema, del modello entità-componente-sistema, fornisce portata globale, servizi e gestione a classi di componenti. Fornisce API pubbliche (metodi e proprietà) per classi di componenti. È possibile accedere a un sistema attraverso l'elemento scene e aiutare i componenti ad interfacciarsi con la scena globale.

Ad esempio, il sistema di telecamere gestisce tutte le entità con il componente della telecamera, controllando quale telecamera è la telecamera attiva.

Parametri

Parametro Dettagli
dati Dati forniti dallo schema disponibili tra gestori e metodi
EL Riferimento a <a-scene>
schema Si comporta allo stesso modo degli schemi di componenti. Analizza i dati.

Osservazioni

METODI

Un sistema, come un componente, definisce i gestori del ciclo di vita. Può anche definire metodi intesi come API pubblica.

Metodo Descrizione
dentro Chiamato una volta quando il sistema è inizializzato. Utilizzato per inizializzare.
pausa Chiamato quando la scena si interrompe. Usato per fermare il comportamento dinamico.
giocare Chiamato quando la scena inizia o riprende. Utilizzato per avviare un comportamento dinamico.
zecca Se definito, verrà richiamato su ogni tacca del ciclo di rendering della scena.

Registrazione di un sistema

Un sistema è registrato in modo simile a un componente A-Frame.

Se il nome del sistema corrisponde a un nome componente, il componente avrà un riferimento al sistema come 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);
  }
});

Accesso a un sistema

Un sistema istanziato è accessibile attraverso la scena:

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

È possibile accedere ai prototipi di sistema registrati tramite AFRAME.systems .

Separazione di logica e dati

I sistemi possono aiutare a separare la logica e il comportamento dai dati, se desiderato. Lasciamo che i sistemi gestiscano il sollevamento pesante ei componenti si preoccupano solo di gestire i dati attraverso i suoi metodi del ciclo di vita:

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

Raccolta di tutti i componenti di un sistema

Non esiste un'API rigorosa per definire come i sistemi gestiscono i componenti. Un modello comune prevede che componenti si iscrivano al sistema. Il sistema ha quindi riferimenti a tutti i suoi componenti:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow