Szukaj…


Wprowadzenie

System o strukturze encja-komponent-system zapewnia globalny zakres, usługi i zarządzanie klasami komponentów. Zapewnia publiczne interfejsy API (metody i właściwości) dla klas komponentów. Dostęp do systemu można uzyskać poprzez element sceny i może on pomóc komponentom połączyć się ze sceną globalną.

Na przykład system kamery zarządza wszystkimi elementami za pomocą komponentu kamery, kontrolując, która kamera jest aktywną kamerą.

Parametry

Parametr Detale
dane Dane dostarczane przez schemat dostępne dla różnych programów obsługi i metod
el Odniesienie do <a-scene>
schemat Zachowuje się tak samo jak schematy komponentów. Analizuje dane.

Uwagi

METODY

System, podobnie jak komponent, definiuje procedury obsługi cyklu życia. Może także definiować metody, które mają być publicznym API.

metoda Opis
w tym Wywoływany raz podczas inicjalizacji systemu. Służy do inicjalizacji.
pauza Wywoływany, gdy scena się zatrzymuje. Służy do zatrzymania dynamicznego zachowania.
grać Wywoływany, gdy scena zaczyna się lub wznawia. Służy do uruchamiania zachowania dynamicznego.
kleszcz Jeśli zdefiniowano, będzie wywoływany przy każdym tiku pętli renderowania sceny.

Rejestracja systemu

System jest rejestrowany podobnie do komponentu A-Frame.

Jeśli nazwa systemu jest zgodna z nazwą komponentu, wówczas komponent będzie miał odniesienie do systemu jako 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);
  }
});

Dostęp do systemu

Do systemu instancji można uzyskać dostęp poprzez scenę:

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

Dostęp do zarejestrowanych prototypów systemu można uzyskać za pośrednictwem systemu AFRAME.systems .

Rozdzielenie logiki i danych

Systemy mogą pomóc oddzielić logikę i zachowanie od danych w razie potrzeby. Pozwalamy systemom obsługiwać podnoszenie ciężarów, a komponenty martwią się o zarządzanie swoimi danymi poprzez swoje metody cyklu życia:

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

Zebranie wszystkich komponentów systemu

Nie ma ścisłego interfejsu API do definiowania sposobu zarządzania komponentami przez systemy. Częstym wzorcem jest subskrypcja komponentów do systemu. Następnie system ma odniesienia do wszystkich swoich komponentów:

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow