Zoeken…


Invoering

Een systeem, volgens het entiteit-component-systeempatroon, biedt wereldwijde reikwijdte, services en beheer voor klassen van componenten. Het biedt openbare API's (methoden en eigenschappen) voor klassen van componenten. Een systeem is toegankelijk via het scene-element en kan componenten helpen bij de interface met de wereldwijde scene.

Het camerasysteem beheert bijvoorbeeld alle entiteiten met de cameracomponent en regelt welke camera de actieve camera is.

parameters

Parameter Details
gegevens Gegevens geleverd door het schema beschikbaar voor handlers en methoden
el Verwijzing naar <a-scene>
schema Gedraagt zich hetzelfde als componentenschema's. Parses naar gegevens.

Opmerkingen

METHODEN

Een systeem definieert, net als een component, handlers voor de levenscyclus. Het kan ook methoden definiëren die bedoeld zijn als openbare API.

Methode Beschrijving
in het Eén keer gebeld wanneer het systeem is geïnitialiseerd. Wordt gebruikt om te initialiseren.
pauze Geroepen wanneer de scène pauzeert. Wordt gebruikt om dynamisch gedrag te stoppen.
Speel Wordt opgeroepen wanneer de scène begint of wordt hervat. Wordt gebruikt om dynamisch gedrag te starten.
Kruis aan Indien gedefinieerd, wordt deze aangeroepen bij elke tik van de renderlus van de scène.

Een systeem registreren

Een systeem is op dezelfde manier geregistreerd als een A-Frame-component.

Als de systeemnaam overeenkomt met een componentnaam, heeft de component een verwijzing naar het systeem zoals dit. Systeem:

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

Toegang tot een systeem

Via de scène is een instantiesysteem toegankelijk:

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

Geregistreerde systeemprototypes zijn toegankelijk via AFRAME.systems .

Scheiding van logica en gegevens

Systemen kunnen desgewenst helpen logica en gedrag van gegevens te scheiden. We laten systemen het zware werk doen en componenten maken zich alleen zorgen over het beheer van hun gegevens via hun levenscyclusmethoden:

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

Alle componenten van een systeem verzamelen

Er is geen strikte API om te definiëren hoe systemen componenten beheren. Een gebruikelijk patroon is dat componenten zich op het systeem abonneren. Het systeem heeft vervolgens verwijzingen naar alle componenten:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow