Szukaj…


Wprowadzenie

Ramka A reprezentuje byt za pośrednictwem elementu <a-entity> . Zgodnie z definicją we wzorcu encja-komponent-system, encje są obiektami zastępczymi, do których podłączamy komponenty, aby zapewnić im wygląd, zachowanie i funkcjonalność.

Składnia

  • <a-entity> // Consider the entity below. By itself, it has no appearance, behavior, or functionality. It does nothing:
  • <a-entity geometry="primitive: box" material="color: red"> // We can attach components to it to make it render something or do something. To give it shape and appearance, we can attach the geometry and material components:
  • <a-entity geometry="primitive: box" material="color: red" light="type: point; intensity: 2.0"> // Or to make it emit light, we can further attach the light component:

Parametry

Parametr Detale
składniki <a-entity>.components to obiekt komponentów dołączonych do encji. To daje nam dostęp do komponentów jednostki, w tym danych, stanu i metod każdego komponentu.
gra Czy jednostka jest aktywna i gra. Jeśli wstrzymamy byt, wówczas funkcja IsPlaying staje się fałszywa.
object3D <a-entity>.object3D jest odniesieniem do reprezentacji obiektu Object.j3 Three.js. Mówiąc dokładniej, object3D będzie obiektem typu THREE.Group który może zawierać różne typy THREE.Object3D takich jak kamery, siatki, światła lub dźwięki:
object3DMap Object3DMap bytu to obiekt, który daje dostęp do różnych typów TRZECH.Obiekt3D (np. Kamera, siatki, światła, dźwięki) ustawionych przez komponenty.
SceneEl Jednostka ma odniesienie do elementu sceny.

Uwagi

METODY


addState (stateName)

addState wypchnie stan na encję. Spowoduje to wyemitowanie zdarzenia stateadded i możemy sprawdzić stan istnienia za pomocą .is :

entity.addEventListener('stateadded', function (evt) {
  if (evt.detail.state === 'selected') {
    console.log('Entity now selected!');
  }
});
entity.addState('selected');
entity.is('selected');  // >> true

emitować (nazwa, szczegół, bąbelki)

emit emituje niestandardowe zdarzenie DOM na encji. Na przykład możemy wyemitować zdarzenie wyzwalające animację:

<a-entity>
  <a-animation attribute="rotation" begin="rotate" to="0 360 0"></a-animation>
</a-entity>
entity.emit('rotate');

Możemy również przekazać szczegóły zdarzenia lub dane jako drugi argument:

entity.emit('collide', { target: collidingEntity });

Domyślnie wydarzenie zostanie zawieszone. możemy powiedzieć, że nie ma bańki, podając false za bańkę:

entity.emit('sink', null, false);

flushToDOM (rekurencyjny)

flushToDOM ręcznie serializuje dane komponentów jednostki i aktualizuje DOM.


getAttribute (componentName)

getAttribute pobiera przeanalizowane dane komponentu (w tym mixiny i wartości domyślne).

// <a-entity geometry="primitive: box; width: 3">
entity.getAttribute('geometry');
// >> {primitive: "box", depth: 2, height: 2, translate: "0 0 0", width: 3, ...}
entity.getAttribute('geometry').primitive;
// >> "box"
entity.getAttribute('geometry').height;
// >> 2
entity.getAttribute('position');
// >> {x: 0, y: 0, z: 0}

Jeśli nazwa_składnika nie jest nazwą zarejestrowanego składnika, getAttribute będzie zachowywać się tak, jak zwykle:

// <a-entity data-position="0 1 1">
entity.getAttribute('data-position');
// >> "0 1 1"

getDOMAttribute (componentName)

getDOMAttribute pobiera tylko przeanalizowane dane komponentów, które są jawnie zdefiniowane w DOM lub za pośrednictwem setAttribute . Jeśli componentName to nazwa zarejestrowanego składnika getDOMAttribute powróci tylko dane składowe określone w HTML jako sparsowaną obiektu. getDOMAttribute dla komponentów jest częściową formą getAttribute, ponieważ zwrócone dane komponentów nie zawierają zastosowanych mixin ani wartości domyślnych:

Porównaj dane wyjściowe powyższego przykładu getAttribute :

// <a-entity geometry="primitive: box; width: 3">
entity.getDOMAttribute('geometry');
// >> { primitive: "box", width: 3 }
entity.getDOMAttribute('geometry').primitive;
// >> "box"
entity.getDOMAttribute('geometry').height;
// >> undefined
entity.getDOMAttribute('position');
// >> undefined

getObject3D (typ)

getObject3D wyszukuje potomka THREE.Object3D, do którego odwołuje się typ na object3DMap .

AFRAME.registerComponent('example-mesh', {
  init: function () {
     var el = this.el;
     el.getOrCreateObject3D('mesh', THREE.Mesh);
     el.getObject3D('mesh');  // Returns THREE.Mesh that was just created.
  }
});

getOrCreateObject3D (typ, konstruktor)

Jeśli encja nie ma THREE.Object3D zarejestrowanego typu , getOrCreateObject3D zarejestruje utworzoną instancję THREE.Object3D za pomocą przekazanego konstruktora . Jeżeli jednostka nie posiada zarejestrowanej pod THREE.Object3D typu getOrCreateObject3D będzie działać jako getObject3D:

AFRAME.registerComponent('example-geometry', {
  update: function () {
    var mesh = this.el.getOrCreateObject3D('mesh', THREE.Mesh);
    mesh.geometry = new THREE.Geometry();
  }
});

pauza ()

pause () zatrzyma wszelkie zachowania dynamiczne zdefiniowane przez animacje i komponenty. Kiedy wstrzymamy byt, zatrzyma on swoje animacje i wywoła Component.pause () na każdym z jego składników. Komponenty decydują się zaimplementować to, co dzieje się podczas pauzy, która często usuwa detektory zdarzeń. Encja wywoła pause () na swoich encji potomnych, gdy wstrzymamy encję.

// <a-entity id="spinning-jumping-ball">
entity.pause();

Na przykład komponent look-control podczas pauzy usunie procedury obsługi zdarzeń, które nasłuchują danych wejściowych.


grać ()

play () uruchomi dowolne zachowanie dynamiczne zdefiniowane przez animacje i komponenty. Jest to wywoływane automatycznie, gdy DOM dołącza jednostkę. Kiedy encja gra () , encja wywołuje play () na encji potomnej.

entity.pause();
entity.play();

Na przykład komponent dźwiękowy podczas odtwarzania rozpocznie odtwarzanie dźwięku.


setAttribute (componentName, wartość, [propertyValue | clobber])

Jeśli nazwa_składnika nie jest nazwą zarejestrowanego składnika lub składnik jest składnikiem pojedynczej właściwości, setAttribute zachowuje się tak, jak zwykle:

entity.setAttribute('visible', false);

Chociaż nazwa_składnika jest nazwą zarejestrowanego składnika, może on obsługiwać specjalne analizowanie wartości. Na przykład komponent pozycji jest komponentem pojedynczej właściwości, ale parser typu właściwości pozwala mu na przyjęcie obiektu:

entity.setAttribute('position', { x: 1, y: 2, z: 3 });

setObject3D (typ, obj)

setObject3D zarejestruje przekazany obj, THREE.Object3D, jako typ pod object3DMap jednostki. Ramka A dodaje obiekt obj jako element podrzędny obiektu głównego obiektu3D .

AFRAME.registerComponent('example-orthogonal-camera', {
  update: function () {
    this.el.setObject3D('camera', new THREE.OrthogonalCamera());
  }
});

removeAttribute (componentName, propertyName)

Jeśli nazwa_składnika jest nazwą zarejestrowanego składnika, wraz z usunięciem atrybutu z DOM, removeAttribute również odłączy składnik od obiektu, wywołując metodę usuwania cyklu życia składnika.

entity.removeAttribute('goemetry');  // Detach the geometry component.
entity.removeAttribute('sound');  // Detach the sound component.

Jeśli podano właściwośćNazwa , removeAttribute zresetuje wartość właściwości określonej przez właściwość propertyName do wartości domyślnej właściwości:

entity.setAttribute('material', 'color', 'blue');  // The color is blue.
entity.removeAttribute('material', 'color');  // Reset the color to the default value, white.

removeObject3D (typ)

removeObject3D usuwa obiekt określony przez typ z THREE.Group bytu, a tym samym ze sceny. Spowoduje to zaktualizowanie obiektu3DMap obiektu , ustawiając wartość klucza typu na null . Jest to zwykle wywoływane z komponentu, często w module obsługi usuwania:

AFRAME.registerComponent('example-light', {
  update: function () {
    this.el.setObject3D('light', new THREE.Light());
    // Light is now part of the scene.
    // object3DMap.light is now a THREE.Light() object.
  },
  remove: function () {
    this.el.removeObject3D('light');
    // Light is now removed from the scene.
    // object3DMap.light is now null.
  }
});

removeState (stateName)

removeState wyświetli stan z encji. Spowoduje to wyemitowanie usuniętego zdarzenia i możemy sprawdzić stan jego usunięcia za pomocą .is :

entity.addEventListener('stateremoved', function (evt) {
  if (evt.detail.state === 'selected') {
    console.log('Entity no longer selected.');
  }
});
entity.addState('selected');
entity.is('selected');  // >> true
entity.removeState('selected');
entity.is('selected');  // >> false

WYDARZENIA

Nazwa wydarzenia Opis
przywiązany do dziecka Encja potomna została dołączona do encji.
odłączony od dziecka Encja potomna została odłączona od encji.
zmieniono składnik Jeden ze składników encji został zmodyfikowany.
componentinit Zainicjowano jeden ze składników jednostki.
element usunięty Jeden ze składników encji został usunięty.
załadowany Jednostka podłączyła i zainicjowała swoje komponenty.
object3dset THREE.Object3D został ustawiony na encji przy użyciu setObject3D (nazwa). Szczegół zdarzenia zawiera nazwę używaną do ustawienia obiektu object3DMap.
pauza Istota jest teraz nieaktywna i wstrzymana pod względem zachowania dynamicznego.
grać Istota jest teraz aktywna i gra pod względem zachowania dynamicznego.
stanowe Podmiot otrzymał nowy stan.
wyremontowany Jednostka nie ma już określonego stanu.
schematycznie zmieniony Schemat komponentu został zmieniony.

SZCZEGÓŁY WYDARZENIA

Poniżej znajduje się szczegół wydarzenia dla każdego wydarzenia:

Nazwa wydarzenia własność Opis
przywiązany do dziecka el Odniesienie do dołączonego elementu potomnego.
zmieniono składnik Nazwa Nazwa komponentu, którego dane zostały zmodyfikowane.
ID Identyfikator komponentu, którego dane zostały zmodyfikowane.
nowe dane Nowe dane komponentu po modyfikacji.
oldData Poprzednie dane komponentu, zanim zostały zmodyfikowane.
składnik zainicjowany Nazwa Nazwa zainicjowanego komponentu.
ID Identyfikator komponentu, którego dane zostały zmodyfikowane.
dane Dane składowe.
element usunięty Nazwa Nazwa usuniętego komponentu.
ID Identyfikator usuniętego komponentu.
stanowe stan Stan, który został dołączony (ciąg).
wyremontowany stan Stan, który został odłączony (ciąg).
schematycznie zmieniony składnik Nazwa komponentu, którego zmieniono schemat.

Odsłuchiwanie zmian komponentów

Możemy użyć zdarzenia componentchanged do nasłuchiwania zmian w encji:

entity.addEventListener('componentchanged', function (evt) {
  if (evt.detail.name === 'position') {
    console.log('Entity has moved from', 
      evt.detail.oldData, 'to', evt.detail.newData, '!');
  }
});

Słuchanie elementów podrzędnych, które są dołączane i odłączane

Możemy wykorzystać zdarzenia dołączone do dziecka i odłączone od niego , aby nasłuchiwać, kiedy scena dołącza lub odłącza byt:

entity.addEventListener('child-attached', function (evt) {
  if (evt.detail.el.tagName.toLowerCase() === 'a-box') {
    console.log('a box element has been attached');
  };
});

Dane komponentu wielu właściwości jednostki (setAttribute)

Aktualizowanie danych składników wielu właściwości

Aby zaktualizować dane komponentu dla komponentu z wieloma właściwościami, możemy przekazać nazwę zarejestrowanego komponentu jako componentName i przekazać obiekt właściwości jako wartość . Dopuszczalny jest również ciąg znaków (np. Typ: punkt; odległość: 30 ), ale obiekty zaoszczędzą ramce A na pracy z parsowaniem:

// Only the properties passed in the object will be overwritten.
entity.setAttribute('light', {
  type: 'spot',
  distance: 30,
  intensity: 2.0
});

Lub, aby zaktualizować indywidualne właściwości komponentu wielowłaściwego, możemy przekazać nazwę zarejestrowanego komponentu jako nazwa komponentu , nazwę właściwości jako drugi argument, a wartość właściwości ustawić jako trzeci argument:

// All previous properties for the material component (besides the color)  will be unaffected.
entity.setAttribute('material', 'color', 'crimson');

Należy zauważyć, że typy właściwości tablic zachowują się wyjątkowo:

  • Tablice są zmienne. Są one przypisywane przez odniesienie, więc zmiany w tablicach będą widoczne dla komponentu.
  • Aktualizacje właściwości typu macierzy nie wyzwalają metody aktualizacji składnika ani nie emitują zdarzeń.

Aktualizowanie danych składników wielu właściwości

Jeśli true zostanie przekazany jako trzeci argument do .setAttribute , wówczas nieokreślone właściwości zostaną zresetowane i zablokowane:

// All previous properties for the light component will be removed and overwritten.
entity.setAttribute('light', {
  type: 'spot',
  distance: 30,
  intensity: 2.0
}, true);

Odzyskiwanie encji

Możemy po prostu pobrać encję za pomocą interfejsów API DOM.

<a-entity id="mario"></a-entity>
var el = document.querySelector('#mario');

Pobieranie komponentów encji

Na przykład, jeśli chcielibyśmy chwycić obiekt aparatu lub obiekt materialny Three.js, moglibyśmy sięgnąć do jego komponentów

var camera = document.querySelector('a-entity[camera]').components.camera.camera;
var material = document.querySelector('a-entity[material]').components.material.material;

Lub jeśli składnik udostępnia interfejs API, możemy wywołać jego metody:

document.querySelector('a-entity[sound]').components.sound.pause();


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