如何在AFrame中的mouseenter中触发动画?
How to make animation trigger in mouseenter in AFrame?
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-entity class="sign" id="sign" position="2.5 1 -3.5" animation__mouseenter="property:rotation; to:0 -390 0; easing:linear; dur:2000; startEvents: mouseenter" rotation="0 -30 0" text="width: 4; align: center; color: black; value: Make the sign board rotate 360">
<a-box color="#FFFF00" position="0 0 -0.05" scale="1.8 0.6 0.1"> </a-box>
<a-box color="#FFFF00" position="0 -0.7 -0.05" scale="0.1 1 0.1"> </a-box>
</a-entity>
<a-camera position="0 0.2 1.3"><a-cursor objects=".duck1 .duck2 sign" ></a-cursor></a-camera>
</a-scene>
</body>
</html>
我正在尝试为 Aframe 1.2.0 添加动画
<a-entity class="sign" id="sign" position="2.5 1 -3.5" animation__mouseenter="property:rotation; to:0 -390 0; easing:linear; dur:2000; startEvents: mouseenter" rotation="0 -30 0" text="width: 4; align: center; color: black; value: Make the boxes meet">
<a-box color="#FFFF00" position="0 0 -0.05" scale="1.8 0.6 0.1"> </a-box>
<a-box color="#FFFF00" position="0 -0.7 -0.05" scale="0.1 1 0.1"> </a-box>
</a-entity>
但是活动没有正常进行。我是不是做错了?
最后,在执行上述代码时,我收到了 raycaster 警告。为什么它出现时我没有使用它。我在实际项目中也遇到了同样的问题。如何解决?
警告
%ccomponents:raycaster:warn %c[raycaster] For performance, please define raycaster.objects when using raycaster or cursor components to whitelist which entities to intersect with. e.g., raycaster="objects: [data-raycastable]".%c color: orange color: inherit color: orange
对于 gaze-based 光标在屏幕中央,你所拥有的几乎是正确的。
objects 中的条目:需要匹配一个选择器,所以 .sign 代表 class 或 #sign 代表 id。
然而,带有class“符号”的实体没有任何几何体,因此光线投射器永远不会击中它。一种解决方案是给 children 相同的 class 的“符号”——然后光线投射器会击中它们,事件会冒泡到 parent 实体,在那里它可以触发动画.
完整代码:
<a-entity class="sign" id="sign" position="2.5 1 -3.5"
animation__mouseenter="property:rotation; to:0 -390 0; easing:linear; dur:2000; startEvents: mouseenter"
rotation="0 -30 0" text="width: 4; align: center; color: black; value: Make the sign board rotate 360">
<a-box class="sign" color="#FFFF00" position="0 0 -0.05" scale="1.8 0.6 0.1"> </a-box>
<a-box class="sign" color="#FFFF00" position="0 -0.7 -0.05" scale="0.1 1 0.1"> </a-box>
</a-entity>
<a-camera position="0 0.2 1.3">
<a-cursor "objects: .sign">
</a-cursor>
</a-camera>
另一种解决方案是为 parent 实体提供光线投射器可以击中的几何体(例如不可见平面)
此处显示第一个解决方案的工作故障:
https://glitch.com/edit/#!/raycast-sign-animation?path=index.html%3A24%3A7
我注意到的一件事是您指定的动画只会 运行 一次。如果您刷新页面,它将再次 运行,但只有一次。
原因是动画有运行第一次后,实体旋转到“0 -390 0”的目标“to”旋转。
如果你想让动画运行多次,添加一个“0 -30 0”的“from”旋转,它应该每次都刷新。我也更新了故障以显示这一点。
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script>
</head>
<body>
<a-scene>
<a-entity class="sign" id="sign" position="2.5 1 -3.5" animation__mouseenter="property:rotation; to:0 -390 0; easing:linear; dur:2000; startEvents: mouseenter" rotation="0 -30 0" text="width: 4; align: center; color: black; value: Make the sign board rotate 360">
<a-box color="#FFFF00" position="0 0 -0.05" scale="1.8 0.6 0.1"> </a-box>
<a-box color="#FFFF00" position="0 -0.7 -0.05" scale="0.1 1 0.1"> </a-box>
</a-entity>
<a-camera position="0 0.2 1.3"><a-cursor objects=".duck1 .duck2 sign" ></a-cursor></a-camera>
</a-scene>
</body>
</html>
我正在尝试为 Aframe 1.2.0 添加动画
<a-entity class="sign" id="sign" position="2.5 1 -3.5" animation__mouseenter="property:rotation; to:0 -390 0; easing:linear; dur:2000; startEvents: mouseenter" rotation="0 -30 0" text="width: 4; align: center; color: black; value: Make the boxes meet">
<a-box color="#FFFF00" position="0 0 -0.05" scale="1.8 0.6 0.1"> </a-box>
<a-box color="#FFFF00" position="0 -0.7 -0.05" scale="0.1 1 0.1"> </a-box>
</a-entity>
但是活动没有正常进行。我是不是做错了?
最后,在执行上述代码时,我收到了 raycaster 警告。为什么它出现时我没有使用它。我在实际项目中也遇到了同样的问题。如何解决?
警告
%ccomponents:raycaster:warn %c[raycaster] For performance, please define raycaster.objects when using raycaster or cursor components to whitelist which entities to intersect with. e.g., raycaster="objects: [data-raycastable]".%c color: orange color: inherit color: orange
对于 gaze-based 光标在屏幕中央,你所拥有的几乎是正确的。
objects 中的条目:需要匹配一个选择器,所以 .sign 代表 class 或 #sign 代表 id。
然而,带有class“符号”的实体没有任何几何体,因此光线投射器永远不会击中它。一种解决方案是给 children 相同的 class 的“符号”——然后光线投射器会击中它们,事件会冒泡到 parent 实体,在那里它可以触发动画.
完整代码:
<a-entity class="sign" id="sign" position="2.5 1 -3.5"
animation__mouseenter="property:rotation; to:0 -390 0; easing:linear; dur:2000; startEvents: mouseenter"
rotation="0 -30 0" text="width: 4; align: center; color: black; value: Make the sign board rotate 360">
<a-box class="sign" color="#FFFF00" position="0 0 -0.05" scale="1.8 0.6 0.1"> </a-box>
<a-box class="sign" color="#FFFF00" position="0 -0.7 -0.05" scale="0.1 1 0.1"> </a-box>
</a-entity>
<a-camera position="0 0.2 1.3">
<a-cursor "objects: .sign">
</a-cursor>
</a-camera>
另一种解决方案是为 parent 实体提供光线投射器可以击中的几何体(例如不可见平面)
此处显示第一个解决方案的工作故障:
https://glitch.com/edit/#!/raycast-sign-animation?path=index.html%3A24%3A7
我注意到的一件事是您指定的动画只会 运行 一次。如果您刷新页面,它将再次 运行,但只有一次。
原因是动画有运行第一次后,实体旋转到“0 -390 0”的目标“to”旋转。
如果你想让动画运行多次,添加一个“0 -30 0”的“from”旋转,它应该每次都刷新。我也更新了故障以显示这一点。