Sök…


Introduktion

A-Frame representerar en enhet via elementet <a-entity> . Som definieras i enhetens komponent-systemmönster är enheter platshållareobjekt till vilka vi ansluter komponenter för att ge dem utseende, beteende och funktionalitet.

Syntax

  • <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:

parametrar

Parameter detaljer
komponenter <a-entity>.components är ett objekt för komponenter som är kopplade till enheten. Detta ger oss tillgång till enhetens komponenter inklusive varje komponents data, tillstånd och metoder.
spelar Huruvida enheten är aktiv och spelar. Om vi pausar enheten blir isPlaying falskt.
object3D <a-entity>.object3D är en hänvisning till enhetens three.js Object3D-representation. Mer specifikt kommer object3D att vara ett THREE.Group som kan innehålla olika typer av THREE.Object3D som kameror, nät, ljus eller ljud:
object3DMap En enhets objekt3DMap är ett objekt som ger tillgång till de olika typerna av TRE. Objekt3D: er (t.ex. kamera, nät, ljus, ljud) som komponenterna har ställt in.
sceneEl En enhet har en referens till sitt scenelement.

Anmärkningar

METODER


addState (stateName)

addState kommer att pressa ett tillstånd till enheten. Detta kommer att avge den stateadded händelsen, och vi kan kontrollera tillståndet kan existera med .is :

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

avge (namn, detalj, bubblor)

emit avger en anpassad DOM-händelse på enheten. Vi kan till exempel avge en händelse för att utlösa en animation:

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

Vi kan också skicka händelsedetaljer eller data som det andra argumentet:

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

Händelsen bubblar som standard. vi kan säga det att inte bubbla genom att lämna falskt för bubblan:

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

flushToDOM (rekursiv)

flushToDOM kommer att manuellt serialisera ett enhets komponenter och uppdatera DOM.


getAttribute (komponentnamn)

getAttribute hämtar analyserad komponentdata (inklusive mixins och standardinställningar).

// <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}

Om komponentnamn inte är namnet på en registrerad komponent, kommer getAttribute att fungera som normalt:

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

getDOMAttribute (komponentnamn)

getDOMAttribute hämtar endast parsad komponentdata som uttryckligen definieras i DOM eller via setAttribute . Om komponentnamn är namnet på en registrerad komponent kommer getDOMAttribute endast att returnera de komponentdata som definierats i HTML som ett analyserat objekt. getDOMAttribute för komponenter är den partiella formen av getAttribute eftersom de returnerade komponentdata inte innehåller tillämpade mixins eller standardvärden:

Jämför utgången från ovanstående exempel på 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 letar upp ett barn TRE.Object3D hänvisat till typobject3DMap .

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, konstruktör)

Om företaget inte har en THREE.Object3D registreras enligt typen kommer getOrCreateObject3D registrera ett instansieras THREE.Object3D använder passerade Constructor. Om företaget har en THREE.Object3D registrerad under typ kommer getOrCreateObject3D att fungera som getObject3D :

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

paus ()

paus () stoppar alla dynamiska beteenden som definieras av animationer och komponenter. När vi pausar en enhet kommer den att stoppa dess animationer och ringa Component.pause () på var och en av dess komponenter. Komponenterna bestämmer sig för att implementera vad som händer vid paus, vilket ofta avlägsnar händelserna. En enhet kommer att ringa paus () på sina barnenheter när vi pausar en enhet.

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

Exempelvis tar look-control-komponenten vid paus bort händelseshanterare som lyssnar efter inmatning.


spela ()

play () startar alla dynamiska beteenden som definieras av animationer och komponenter. Detta anropas automatiskt när DOM kopplar en enhet. När en enhet spelar () , kallar enheten spel () på sina barnenheter.

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

Till exempel börjar ljudkomponenten på uppspelningen spela ljudet.


setAttribute (komponentnamn, värde, [propertyValue | clobber])

Om komponentnamn inte är namnet på en registrerad komponent eller om komponenten är en komponent med en egenskap, uppträder setAttribute som det normalt skulle göra:

entity.setAttribute('visible', false);

Även om komponentnamn är namnet på en registrerad komponent, kan den hantera speciell parsing för värdet. Till exempel är positionskomponenten en komponent med en egenskap, men dess parsert för egenskapstyp tillåter den att ta ett objekt:

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

setObject3D (typ, obj)

setObject3D kommer att registrera den godkända obj , en THREE.Object3D , som typ under enhetens objekt3DMap . A-Frame lägger till obj som ett barn av företagets rotobjekt3D .

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

removeAttribute (componentName, propertyName)

Om componentName är namnet på en registrerad komponent, tillsammans med att ta bort attributet från DOM, kommer removeAttribute också att ta bort komponenten från enheten och åberopa komponentens metod för att ta bort livscykel.

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

Om egenskapsnamn anges återställer removeAttribute egenskapsvärdet för den egenskap som specificeras av egenskapsnamn till egenskapens standardvärde:

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

removeObject3D (typ)

removeObject3D tar bort objektet som anges efter typ från enhetens THREE.Group och därmed från scenen. Detta kommer att uppdatera företagets object3DMap, sätta värdet på nyckeln typ noll. Detta kallas vanligtvis från en komponent, ofta inom borttagningshanteraren:

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 kommer att visa ett tillstånd från enheten. Detta kommer att avge den stateremovedhändelsen , och vi kan kontrollera tillståndet för att det tas bort med .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

EVENEMANG

Event namn Beskrivning
barnlösa En barnenhet var kopplad till enheten.
barn-detached En barnenhet kopplades bort från enheten.
componentchanged En av enhetens komponenter modifierades.
componentinit En av enhetens komponenter initialiserades.
componentremoved En av enhetens komponenter togs bort.
lastad Företaget har kopplat och initialiserat sina komponenter.
object3dset THREE.Object3D inställdes på enheten med setObject3D (namn). Eventdetaljer kommer att innehålla namn som används för att ställa in på object3DMap.
paus Enheten är nu inaktiv och pausad när det gäller dynamiskt beteende.
spela Enheten är nu aktiv och spelar när det gäller dynamiskt beteende.
stateadded Enheten fick ett nytt tillstånd.
stateremoved Enheten har inte längre ett visst tillstånd.
schemachanged Schemat för en komponent ändrades.

EVENEMANGSDETALJER

Nedan följer vad händelsesdetaljer innehåller för varje evenemang:

Event namn Fast egendom Beskrivning
barnlösa el Hänvisning till det bifogade barnelementet.
componentchanged namn Namnet på komponenten som hade dess data ändrats.
id ID för komponenten som hade dess data modifierad.
NewData Komponentens nya data, efter att de har ändrats.
OldData Komponentens tidigare data, innan de ändrades.
componentinitialized namn Namnet på komponenten som initierades.
id ID för komponenten som hade dess data modifierad.
data Komponentdata.
componentremoved namn Namnet på komponenten som togs bort.
id ID för komponent som togs bort.
stateadded stat Tillståndet som var bifogat (sträng).
stateremoved stat Tillståndet som lossades (sträng).
schemachanged komponent Namnet på komponenten som hade sitt schema har ändrats.

Lyssna på komponentändringar

Vi kan använda den komponentväxlade händelsen för att lyssna på förändringar i enheten:

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

Lyssna på barnelement som är fästade och lossna

Vi kan använda de barnfäste och barnavskiljade händelserna för att lyssna på när scenen fäster eller kopplar bort en enhet:

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

Entity Multi-Property Component Data (setAttribute)

Uppdatering av komponentdata för flera fastigheter

För att uppdatera komponentdata för en komponent med flera egenskaper kan vi skicka namnet på en registrerad komponent som komponentnamnet och skicka ett objekt med egenskaper som värdet . En sträng är också godtagbar (t.ex. typ: spot; avstånd: 30 ), men objekt sparar A-Frame en del arbete vid parsning:

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

Eller för att uppdatera enskilda egenskaper för en komponent med flera egenskaper, kan vi skicka namnet på den registrerade komponenten som komponentnamnet , ett egendomsnamn som det andra argumentet och egenskapsvärdet som ska ställas in som det tredje argumentet:

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

Observera att arrayegenskaper fungerar unikt:

  • Matriser är muterbara. De tilldelas genom referens så att ändringar i matriser kommer att synas av komponenten.
  • Uppdateringar för array-typegenskaper utlöser inte komponentens uppdateringsmetod och släpper inte händelser.

Uppdatering av komponentdata för flera fastigheter

Om true överförs som det tredje argumentet till .setAttribute , kommer återställda egenskaper att återställas och klövas:

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

Hämta en enhet

Vi kan helt enkelt hämta en enhet med DOM-API: er.

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

Hämta en enhetskomponenter

Om vi till exempel ville ta ett enhets tre.js-kameraobjekt eller materiella objekt, kunde vi nå in i dess komponenter

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

Eller om en komponent exponerar ett API kan vi kalla dess metoder:

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow