【问题标题】:a-scene cursor breaks raycaster场景光标中断 raycaster
【发布时间】:2021-02-22 17:40:33
【问题描述】:

我正在尝试设置有保险丝来触发悬停动画,同时仍然能够点击/点击环境中的项目。

<a-cursor position="0 0 -0.25"></a-cursor> 添加为我的相机的子项会在屏幕上显示环形光标,并允许悬停 mouseenter/mouseleave eventListeners 按预期触发。

然后我将cursor="rayOrigin:mouse;" 添加到场景中,这样我就可以点击场景中的对象,但这会破坏悬停动画。

对于悬停动画,我有一个不可见的平面,但位于具有 mouseenter/mouseleave eventListeners 的动画对象的前面。但是,当光标在光线投射中同时具有平面和对象时,就会调用 mouseleave。如果省略 cursor="rayOrigin:mouse;",则不会发生这种情况。

此处出现故障 --> https://glitch.com/edit/#!/join/49af29f1-557a-4976-bc2b-f89fce5e3ad6

【问题讨论】:

  • 没有运行和调试的代码将很难提供帮助。我建议使用glitch.com/~aframe 分享说明问题的简单代码
  • 嘿 Diego - 我添加了一个显示问题的故障 - 就像我说的,如果你删除 cursor="rayOrigin:mouse;"它按预期工作,但是我无法单击场景中的对象
  • 如果有办法限制光线投射器专注于第一个相交的网格,我认为这可能会有所帮助??
  • 您可以确保一次只有一个 cursor 处于活动状态 - 无需拥有两只鼠标 :) 查看 this question
  • 下面的答案可以在移动设备上按预期工作,但我仍然在桌面上看到奇怪的行为。例如,如果我将鼠标单击到一侧,它会在保险丝光标位置注册一次单击。有什么方法可以将移动设备上发生的任何事情应用到桌面版本?谢谢

标签: javascript aframe


【解决方案1】:

<a-cursor> 干扰了场景的光标

<a-scene cursor="...">
  <a-camera>
    <a-cursor>
    </a-cursor>

因为&lt;a-cursor&gt; 创建的raycaster 会发出事件(在交叉路口和清除时),这些事件会冒泡并被&lt;a-scene&gt;s 光标捕获。正是these two listeners

为了防止它们相互干扰,可以去掉两者之间的父子关系:

<a-camera>
  <a-cursor>
  </a-cursor>
</a-camera>
<a-entity cursor="rayOrigin: mouse"></a-entity>

查看this fiddle


另一种方法是动态添加/删除一个游标,这样一次只有“预期”的游标在工作。

【讨论】:

  • 它可能应该被更改,以便cursor 只对它创建的raycaster 做出反应
  • 我欠你一大笔啤酒!再次感谢您的专业知识
猜你喜欢
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多