实体 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 | 更改了架构的组件的名称。 |