Sök…


Introduktion

Ett system med enhetens komponent-systemmönster tillhandahåller global omfattning, tjänster och hantering till klasser av komponenter. Det tillhandahåller offentliga API: er (metoder och egenskaper) för klasser av komponenter. Ett system kan nås via scenelementet och kan hjälpa komponenter att gränssnitt mot den globala scenen.

Till exempel hanterar kamerasystemet alla enheter med kamerakomponenten och styr vilken kamera som är den aktiva kameran.

parametrar

Parameter detaljer
data Data tillhandahållna av schemat tillgängliga över hanterare och metoder
el Hänvisning till <a-scene>
schema Har samma sak som komponentscheman. Analyser av data.

Anmärkningar

METODER

Ett system, som en komponent, definierar livscykelhanterare. Det kan också definiera metoder som är avsedda att vara ett offentligt API.

Metod Beskrivning
i det Ringer en gång när systemet initieras. Används för att initialisera.
paus Ringas när scenen pausar. Används för att stoppa dynamiskt beteende.
spela Ringer när scenen startar eller återupptas. Används för att starta dynamiskt beteende.
bock Om det definieras kommer det att kallas på varje fästing i scenens renderingsslinga.

Registrera ett system

Ett system registreras på liknande sätt som en A-Frame-komponent.

Om systemnamnet matchar ett komponentnamn har komponenten en referens till systemet som detta.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);
  }
});

Åtkomst till ett system

Ett instanserat system kan nås genom scenen:

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

Registrerade systemprototyper kan nås via AFRAME.systems .

Separation av logik och data

System kan hjälpa till att skilja logik och beteende från data om så önskas. Vi låter system hantera tunga lyft, och komponenter bara oroar sig för att hantera dess data genom sina livscykelmetoder:

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

Samla alla komponenter i ett system

Det finns inget strikt API för att definiera hur system hanterar komponenter. Ett vanligt mönster är att låta komponenter prenumerera på systemet. Systemet har sedan referenser till alla dess komponenter:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow