我正在使用event-set-component来使我的obj模型在光标悬停在其上时增加比例。
这是正常的。
但是我如何让它旋转以及增加尺寸?
我在AFrame文档中找到了以下代码,但我不知道如何实现它,因此当鼠标悬停在实体上时会触发它。
<a-animation attribute="material.opacity" begin="fade" to="0"></a-animation>
答案 0 :(得分:2)
由于你在评论中要求使用不同的方法,我建议使用像我写的那样的多用途组件:
AFRAME.registerComponent('event-animate', {
schema: {
target: {type: 'selector'},
aevent: {default: 'animation1'},
triggeraction: {default: 'click'}
},
init: function () {
var data = this.data;
this.el.addEventListener(data.triggeraction, function () {
data.target.emit(data.aevent);
});
}
});
所以在HTML中它看起来像这样:
<a-entity id="object1"
event-animate="target:object1;
triggeraction:mouseenter;
aevent:eventstart">
<a-animation attribute="scale"
dur="5000"
begin="eventstart"
from="1"
to ="5"
direction="alternate">
</a-animation>
<a-animation attribute="rotation"
dur="5000"
begin="eventstart"
from="0 0 0"
to="0 360 0"
direction="alternate">
</a-animation>
</a-entity>
方向=&#34;替代&#34;应该把它带回原来的位置。
答案 1 :(得分:1)
如果正确设置了begin事件,引用的动画将起作用:
<a-animation attribute="rotation"
dur="2000"
begin="mouseenter"
to="0 360 0"
repeat="1"><a-animation>
在mouseenter上,动画触发并旋转实体一次。
AFRAME.registerComponent('mouseenterhandler', {
init: function () {
let el = this.el; //Your element reference
el.addEventListener('mouseenter, function () {
// get the rotation, by getAttribute, or by accessing the
//object3D.rotation
let rotation = el.getAttribute('rotation');
//lets rotate it to the same position
rotation.y += 360;
//set the animation component accordingly:
el.children[0].setAttribute('to',rotation);
//emit the 'begin' event:
el.emit('startrotating');
});
}
});
必要时快速改进:触发动画时禁用侦听器。使用布尔值打开mouseenter事件和animationend事件。
2.您可以选择不使用动画组件,如果光标结束则检查tick()。如果是这样,则通过actualRotation.y + 0.1(或任何其他所需的旋转)旋转元素
如前所述,您可以通过getAttribute()或el.object3D.rotation访问旋转。