我正在尝试在 A-Frame 控制环境照明的墙上做一个灯开关。
我在场景中放置了实际的灯光,以便命名它们,并使用 javascript 进行更改。
由于我无法让游戏控制器 gamepadbuttondown:0(或 5)注册为 onClick 事件,因此我向开关本身的 a-entity 添加了一个动画,并且我有一个事件侦听器准备触发并制作变化。
一切都可以在台式电脑上运行,使用实际的鼠标和编程的 onClick 事件,但是当在带有廉价 5 美元 Mocute 控制器的 VR 头戴式手机上尝试时,我被卡住了。
<a-entity id="lightswitch" onclick="WorksFineOnPC();" >
<a-box geometry="height:4.5; depth:4.5; width:.25" position="143 48 14" material="src:https://www.myWebsite/pic.jpg;">
<a-animation id="LightAnimation" attribute="rotation" to="0 360 0" dur="100" begin="gamepadbuttondown:0"></a-animation>
</a-box>
</a-entity>
将“gamepadbuttondown:0”替换为“click”在 PC 上运行良好,但 onClick 功能开始运行良好,并且仍然无法使用遥控器进行控制。
gamepadbuttondown:0 适用于声音,如下例所示:
<a-entity gamepad-controls
sound="src: pew-pew.wav;
on: gamepadbuttondown:7">
这个控制器和其他控制器工作得很好,所以错误出现在动画触发事件的某个地方。
我计划将动画缩短到 1 毫秒,而不是 100 毫秒。我只是将它作为启动事件的一种方式,因此我可以使用事件侦听器来查看何时发出“animationend”。并希望它对用户不可见。
我尝试使用空动画,但如果我没有输入类型和方向,则无法渲染该框。
如果可能的话,我想完全跳过动画,如果有人知道如何使用 button[x] 而不是使用实际鼠标从控制器触发 onclick 事件。也许有一个raycaster解决方案?直接访问引擎盖下的 Three.js?