我正试图在A-Frame控制环境照明中对墙壁进行灯光开关。
我在场景中放置了实际灯光,因此我可以为它们命名,并使用javascript进行更改。
因为我无法获得游戏控制器gamepadbuttondown:0(或5) 要注册为onClick事件,我向a-entity添加了一个动画 交换机本身,我有一个事件监听器准备启动并进行更改。
桌面PC上的所有功能都可以通过实际鼠标和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”在PC上正常工作, 但onClick函数可以正常工作,但仍无法控制遥控器。
gamepadbuttondown:0适用于声音,如本例所示:
<a-entity gamepad-controls
sound="src: pew-pew.wav;
on: gamepadbuttondown:7">
这个控制器和其他控制器工作正常,所以错误在动画触发事件的某个地方。
我计划将动画缩短到1毫秒而不是100。我只将它作为一种启动事件的方式包含在内,这样我就可以使用事件监听器来查看“animationend”的发送时间。 并希望它对用户不可见。
我尝试使用空动画, 但如果我将类型和方向排除在外,则框无法渲染。
如果可能的话,我想完全跳过动画,如果有人知道如何使用按钮[x]而不是使用实际鼠标从控制器触发onclick事件。 是否有raycaster解决方案?直接访问引擎盖下的Three.js?
答案 0 :(得分:0)
在Web浏览器中,onclick="foo()"
语法表示当事件使用类型click
触发时,执行该函数。由于按下按钮不是点击,因此onclick
对您没有任何帮助。
相反,您可以为任何类型的事件类型创建一个侦听器:
var lightswitchEl = document.querySelector('#lightswitch');
lightswitchEl.addEventListener('gamepadbuttondown:7', function () {
console.log('button pressed!');
});
如果你希望那是&#34;声明&#34;在你的HTML中,只需注册一个A-Frame组件来为你倾听:
AFRAME.registerComponent('my-listener', {
init: function () {
this.el.addEventListener('gamepadbuttondown:7', function () {
console.log('button pressed!');
});
}
});
然后:
<a-entity id="lightswitch" my-listener></a-entity>
注意:
gamepadbuttondown:7
事件不是浏览器创建的普通事件。它是为了gamepad-controls组件的方便而生成的。
答案 1 :(得分:0)
onclick="SetSubjectOfFocus('light switch');
然后我添加了3个不同的事件监听器:moseup,touchend和button:0 所有3个活动都将启动“待办事项列表”。功能
然后该函数将查看分配给焦点主题的var, 并使用if-then语句清单激发期望的效果。
我正在使用&#39;点击&#39;但融合导致了我所看到的一切 自动选择。我可能会添加一个切换按钮,默认情况下为没有游戏手柄的人启用它,但如果检测到游戏手柄则将其关闭。 (即不添加事件监听器,或添加一个。)
https://jsfiddle.net/RonK/vm81ddn7/8/
我需要将设置融合超时返回到0,这样就没有延迟,如果你赶时间,它不会意外点击旧项目。
这可以添加到下一版本的gamepad-controls.js中。 我建议在后端使用所有这些,除了:
<a-entity id="lightswitch" my-listener></a-entity>
和
<a-entity id="lightswitch" onClick="DoSomething();"></a-entity>
你可以添加:
<a-entity id="lightswitch" OnTriggerEvent="DoSomething();"></a-entity>