AR.js 场景中可点击对象的错误位置
Wrong position of a clickable object on AR.js scene
我有一个简单的 AR.js 场景,它应该在 hiro 标记上显示一个可点击的白框。单击后框的颜色应变为红色。其实这个盒子是可以点击的,颜色也在变化,但是它的位置和它的可点击区域的位置不一样。在我的例子中,这个区域在盒子下面。这是一个代码示例:
<!DOCTYPE html>
<html>
<script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script>
<script src="https://rawgit.com/jeromeetienne/ar.js/master/aframe/build/aframe-ar.js"></script>
<script>
AFRAME.registerComponent('clickhandler', {
init: function () {
this.el.addEventListener('click', () => {
this.el.setAttribute('material', 'color: red;');
});
},
});
</script>
<body>
<a-scene embedded arjs>
<a-marker cursor="rayOrigin: mouse;" preset="hiro">
<a-box
material="color: white;"
position="0 0 0"
depth="0.2"
height="0.01"
width="0.2"
clickhandler
/>
</a-marker>
<a-entity camera></a-entity>
</a-scene>
</body>
</html>
但是,如果您打开 aframe 检查器 (Ctrl + Alt + I) 然后关闭它,框的可点击区域及其位置将是正确的,我不明白这是怎么回事。那么如何才能让这个场景以正确的方式显示呢?
我研究了 aframe inspector 的工作原理,发现它在初始化后以编程方式插入了一个新的 raycaster,所以我决定这样做并且成功了!
要将可点击区域与其对象放在同一位置,您需要做的就是在场景完全初始化后执行这些行。
const scene = AFRAME.scenes[0];
if (!scene) {
return;
}
const mouseCursor = document.createElement('a-entity');
mouseCursor.setAttribute('cursor', 'rayOrigin', 'mouse');
scene.appendChild(mouseCursor);
我有一个简单的 AR.js 场景,它应该在 hiro 标记上显示一个可点击的白框。单击后框的颜色应变为红色。其实这个盒子是可以点击的,颜色也在变化,但是它的位置和它的可点击区域的位置不一样。在我的例子中,这个区域在盒子下面。这是一个代码示例:
<!DOCTYPE html>
<html>
<script src="https://aframe.io/releases/0.9.2/aframe.min.js"></script>
<script src="https://rawgit.com/jeromeetienne/ar.js/master/aframe/build/aframe-ar.js"></script>
<script>
AFRAME.registerComponent('clickhandler', {
init: function () {
this.el.addEventListener('click', () => {
this.el.setAttribute('material', 'color: red;');
});
},
});
</script>
<body>
<a-scene embedded arjs>
<a-marker cursor="rayOrigin: mouse;" preset="hiro">
<a-box
material="color: white;"
position="0 0 0"
depth="0.2"
height="0.01"
width="0.2"
clickhandler
/>
</a-marker>
<a-entity camera></a-entity>
</a-scene>
</body>
</html>
但是,如果您打开 aframe 检查器 (Ctrl + Alt + I) 然后关闭它,框的可点击区域及其位置将是正确的,我不明白这是怎么回事。那么如何才能让这个场景以正确的方式显示呢?
我研究了 aframe inspector 的工作原理,发现它在初始化后以编程方式插入了一个新的 raycaster,所以我决定这样做并且成功了!
要将可点击区域与其对象放在同一位置,您需要做的就是在场景完全初始化后执行这些行。
const scene = AFRAME.scenes[0];
if (!scene) {
return;
}
const mouseCursor = document.createElement('a-entity');
mouseCursor.setAttribute('cursor', 'rayOrigin', 'mouse');
scene.appendChild(mouseCursor);