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