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