代码之家  ›  专栏  ›  技术社区  ›  Niraj

gltf光标侦听器单击A帧中的事件

  •  2
  • Niraj  · 技术社区  · 7 年前

    我无法理解为什么游标侦听器对除gltf模型之外的所有实体都能正常工作。

    这是我的html

    <div id="myEmbeddedScene">
      <a-scene embedded="">
        <a-assets>
              <a-asset-item id="ducks" src="../images/test.glb"></a-asset-item>
        </a-assets>
    
        <a-box cursor-listener color="#CCC" width="3" depth="3" height="0.1" position="0 0 -2"></a-box>
    
        <a-entity cursor-listener id="duck" gltf-model="#ducks" position="0 0.1 -2" rotation="0 -90 0"></a-entity>
    
        <a-camera>
          <a-cursor></a-cursor>
        </a-camera>
    
      </a-scene>
    </div>
    

    这里是a-frame中的游标侦听器组件

    AFRAME.registerComponent('cursor-listener', {
        init: function () {
                this.el.addEventListener('click', function (evt) {
                console.log('I was clicked');               
            });
      }
    });
    

    控制台日志对于box实体来说是正常的,但对于gltf模型来说不是。请有人给点建议好吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Don McCurdy    7 年前

    你遇到了 issue described here :加载模型后,需要刷新用于检测点击的光线投射器,以便了解模型。

    more robust solution on the way 对于A-Frame 0.8.0,但在此期间,您可以通过以下方式解决此问题:

    AFRAME.registerComponent('raycaster-autorefresh', {
      init: function () {
        var el = this.el;
        this.el.addEventListener('model-loaded', function () {
          var cursorEl = el.querySelector('[raycaster]');
          cursorEl.components.raycaster.refreshObjects();
        });
      }
    });
    

    然后需要添加 raycaster-autorefresh Codepen showing the solution .