實體 a-entity
方法
addState(stateName)
addState 會將狀態推送到實體上。這將發出 stateadded 的事件,我們可以檢查狀態可使用存在**。是** :
entity.addEventListener('stateadded', function (evt) {
if (evt.detail.state === 'selected') {
console.log('Entity now selected!');
}
});
entity.addState('selected');
entity.is('selected'); // >> true
發射(名稱,細節,氣泡)
emit 在實體上發出自定義 DOM 事件。例如,我們可以發出一個事件來觸發動畫:
<a-entity>
<a-animation attribute="rotation" begin="rotate" to="0 360 0"></a-animation>
</a-entity>
entity.emit('rotate');
我們還可以將事件詳細資訊或資料作為第二個引數傳遞:
entity.emit('collide', { target: collidingEntity });
該事件預設會冒泡。我們可以告訴它不要通過傳遞假泡泡來泡泡:
entity.emit('sink', null, false);
flushToDOM(遞迴)
flushToDOM 將手動序列化實體的元件資料並更新 DOM。
getAttribute(componentName)
getAttribute 檢索已解析的元件資料(包括 mixins 和預設值)。
// <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}
如果 componentName 不是已註冊元件的名稱,則 getAttribute 將按照通常的方式執行:
// <a-entity data-position="0 1 1">
entity.getAttribute('data-position');
// >> "0 1 1"
getDOMAttribute(componentName)
getDOMAttribute 僅檢索在 DOM 中或通過 setAttribute 顯式定義的已解析元件資料。如果 componentName 是已註冊元件的名稱,則 getDOMAttribute 將僅返回 HTML 中定義的元件資料作為已解析物件。元件的 getDOMAttribute 是 getAttribute 的部分形式,因為返回的元件資料不包括應用的 mixins 或預設值:
比較上面 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(型別)
getObject3D 查詢孩子 THREE.Object3D 通過引用型別上 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(type, Constructor)
如果實體不具有 THREE.Object3D 下注冊型別, getOrCreateObject3D 會註冊一個例項 THREE.Object3D 使用傳遞的構造。如果實體確實在型別下注冊了 THREE.Object3D ,則 getOrCreateObject3D 將充當 getObject3D : **** **** ****
AFRAME.registerComponent('example-geometry', {
update: function () {
var mesh = this.el.getOrCreateObject3D('mesh', THREE.Mesh);
mesh.geometry = new THREE.Geometry();
}
});
暫停()
pause()
將停止動畫和元件定義的任何動態行為。當我們暫停一個實體時,它將停止其動畫並在其每個元件上呼叫 Component.pause()
。元件決定實現暫停時發生的事情,這通常會刪除事件偵聽器。當我們暫停實體時,實體將在其子實體上呼叫 pause()
。
// <a-entity id="spinning-jumping-ball">
entity.pause();
例如,暫停時的 look-controls 元件將刪除偵聽輸入的事件處理程式。
玩()
play()
將啟動動畫和元件定義的任何動態行為。當 DOM 附加實體時,會自動呼叫此方法。當實體 play()
時,實體在其子實體上呼叫 play()
。
entity.pause();
entity.play();
例如,播放中的聲音元件將開始播放聲音。
setAttribute(componentName,value,[propertyValue | clobber])
如果 componentName 不是已註冊元件的名稱,或者元件是單屬性元件,則 setAttribute 的行為與通常情況相同:
entity.setAttribute('visible', false);
雖然如果 componentName 是已註冊元件的名稱,它可以處理該值的特殊解析。例如, position 元件是單屬性元件,但其屬性型別解析器允許它獲取一個物件:
entity.setAttribute('position', { x: 1, y: 2, z: 3 });
setObject3D(type, obj)
setObject3D 將在實體的 object3DMap 下注冊傳遞的 obj ,一個 THREE.Object3D ,型別。A-Frame 將 obj 新增為實體的根物件 3D 的子節點。 **** **** ****
AFRAME.registerComponent('example-orthogonal-camera', {
update: function () {
this.el.setObject3D('camera', new THREE.OrthogonalCamera());
}
});
removeAttribute(componentName, propertyName)
如果 componentName 是已註冊元件的名稱,並且從 DOM 中刪除該屬性,則 removeAttribute 還將從實體中分離元件,從而呼叫元件的 remove lifecycle 方法。
entity.removeAttribute('goemetry'); // Detach the geometry component.
entity.removeAttribute('sound'); // Detach the sound component.
如果 propertyName 的給定,的 removeAttribute 將重置由指定屬性的屬性值 propertyName 的該屬性的預設值:
entity.setAttribute('material', 'color', 'blue'); // The color is blue.
entity.removeAttribute('material', 'color'); // Reset the color to the default value, white.
removeObject3D(型別)
removeObject3D 去除由指定的物件型別從該實體的 THREE.Group 並因此從場景。這將更新實體的 object3DMap ,將 type 鍵的值設定為 null 。這通常是從元件中呼叫的,通常在 remove 處理程式中呼叫:
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 將從實體中彈出一個狀態。這將發出 stateremoved 的事件,我們可以通過檢查狀態的去除**。是** :
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
事件
事件名稱 | 描述 |
---|---|
child-attached |
子實體附屬於該實體。 |
child-detached |
子實體與實體分離。 |
componentchanged |
其中一個實體的元件已被修改。 |
componentinit |
實體的一個元件已初始化。 |
componentRemoved |
其中一個實體的元件已被刪除。 |
loaded |
該實體已附加並初始化其元件。 |
object3dset |
使用 setObject3D(name) 在實體上設定 THREE.Object3D。事件詳細資訊將包含用於在 object3DMap 上設定的名稱。 |
pause |
該實體現在處於非活動狀態,並在動態行為方面暫停。 |
play |
該實體現在處於活躍狀態並且在動態行為方面發揮作用。 |
stateadded |
該實體獲得了新的狀態。 |
stateremoved |
該實體不再具有某種狀態。 |
schemachanged | 元件的架構已更改。 |
事件詳情
以下是每個事件的事件詳細資訊:
事件名稱 | 屬性 | 描述 |
---|---|---|
child-attached |
el | 引用附加的子元素。 |
componentchanged |
name | 已修改其資料的元件的名稱。 |
id | 已修改其資料的元件的 ID。 | |
newData | 元件的新資料在修改後。 | |
oldData | 元件的先前資料,在修改之前。 | |
componentinitialized |
name | 已初始化的元件的名稱。 |
id | 已修改其資料的元件的 ID。 | |
data | 元件資料。 | |
componentRemoved |
name | 已刪除的元件的名稱。 |
id | 已刪除的元件的 ID。 | |
stateadded |
state | 附加的狀態(字串)。 |
stateremoved |
state | 分離的狀態(字串)。 |
schemachanged |
component | 更改了架構的元件的名稱。 |