【问题标题】:My three.js script is not running on a-frame我的 three.js 脚本没有在框架上运行
【发布时间】:2019-06-06 06:43:03
【问题描述】:

我正在尝试使光线投射器仅在实体可见时起作用。我被告知要尝试编写一个脚本以使其正常工作,所以我继续这样做。 所有实体和子实体,我都可以通过点击进行交互,并且我的大部分事件都是通过点击触发的,这使得某些实体变得不可见:

<script id="city" type="text/html">
      <a-entity class="city"
        geometry="primitive: plane; height: 0.2; width: 0.5"
        data-raycastable
        material="color: black"
        text="value: ${city_name}; color: white; align: center; wrapCount: 10; font: exo2bold"
        event-set__mouseenter="scale: 1.5 1.5 1"
        event-set__mouseleave="scale: 1 1 1"
        event-set__1="_event: click; _target: #image-360; _delay: 300; material.src: ${src}"
        event-set__2="_event: click; _target: #models; _delay: 300; visible: false"
        event-set__3="_event: click; _target: #cities; _delay: 300; visible: true"
        event-set__4="_event: click; _target: #show_button; _delay: 300; visible: true"
        event-set__5="_event: click; _target: ${map}; _delay: 300; visible: true"
        proxy-event="event: click; to: #image-360; as: fade"
        sound="on: click; src: #click-sound"></a-entity>
    </script>

您在此处看到的 data-raycastable 参数正在运行此此处的脚本:

AFRAME.registerComponent('data-raycastable', {
      init: function () {
        var self = this;
        var el = this.el;
        var data = this.data;

        this.eventHandlerFn = function () {
          if (el.object3D.visible = true){
          el.setAttribute('data-raycastable', '');
          }
          else {
            el.removeAttribute('data-raycastable')
          }
        }

        update: function() {

          el.addEventListener('click', this.eventHandlerFn);
          } 
          }
        }
      })

现在,我想知道为什么我的这个脚本不起作用。我密切关注 A-frame 文档,试图使其工作,但它没有。光标按钮如下所示:

<a-entity id="camera" camera look-controls>
    <a-cursor
      id="cursor"
      material="color: black; shader: flat"
      position="0 0 -4.5"       
      geometry="primitive: ring; radiusInner: 0.15; radiusOuter: 0.2"
      animation__click="property: scale; startEvents: click; from: 0.1 0.1 0.1; to: 1 1 1; dur: 150"
      animation__fusing="property: fusing; startEvents: fusing; from: 1 1 1; to: 0.1 0.1 0.1; dur: 1500"
      event-set__mouseenter="_event: mouseenter; color: springgreen"
      event-set__mouseleave="_event: mouseleave; color: black"
      raycaster="objects: [data-raycastable], .link, .model">
    </a-cursor>        
  </a-entity> 

有人可以引导我朝着正确的方向前进吗?

【问题讨论】:

  • 分享一个链接,指向人们可以查看的完整可运行示例。故障会做glitch.com/~aframe
  • 到目前为止,您将 HTML 放在脚本标签中,而它应该放在 中。您的实体应该在 标记中。以故障为起点:glitch.com/~aframe
  • glitch.com/edit/#!/… 你好,先生
  • 谢谢。那里有很多东西(多个 html 文件)。很难看出意图和在哪里看。到目前为止,您将 JS 嵌入到没有脚本标签的 HTML 中,多个 应该只有一个,使用脚本标签的模板似乎不正确......我建议从工作场景开始并保持简单人们可以帮助你...glitch.com/~aframe
  • 嘿,伙计,很抱歉造成负担,但我很可能在您查看它时附加了它。如果您可以再查看此链接glitch.com/edit/#!/…,那将非常有帮助。对于如何使我的不可见组件不可点击/不可投射,我非常迷茫。我对此也很陌生

标签: javascript html three.js aframe


【解决方案1】:

不确定您的组件试图完成什么,到目前为止它存在语法错误(架构后缺少逗号)并且el 引用无效。更正代码:

AFRAME.registerComponent('data-raycastable', {         
          schema: {
            event: {type: 'boolean', default: true}  
          },
          init: function () {
            var el = this.el;
            el.addEventListener('click', function() {
                if (el.object3D.visible = false) {
                  el.classList.remove('raycastable');
                }
                else if (el.object3D.visible = true) {
                  el.classList.add('raycastable');
                }
            })
          }  
        });

使用类而不是数据属性来实现 raycastability。更正的故障:https://glitch.com/edit/#!/aquatic-aftershave

【讨论】:

  • 嘿伙计,非常感谢您查看我的代码。我尝试了更正的故障,似乎隐形实体仍然是可投射的
  • 致电document.querySelector('[raycaster]').components.raycaster.refreshObjects();。我纠正了故障
  • 我不知道我是否在代码中做错了什么,但我只是再次运行它并进行更正,它仍然无法不投射不可见的项目
  • 代码很复杂,您从未描述过预期的行为。我只看到单击时更改显示的全景图的按钮。我不确定您希望切换可见性和光线可投射性的元素。这是上面点击处理程序中必须执行的逻辑。
  • 一个例子是我点击我面前的黎凡特地图,左边的模型变得不可见。我将如何使这个例子工作?如果我知道这个是如何工作的,我想我应该能够为我的其他场景延续逻辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 2019-08-16
  • 1970-01-01
  • 2011-06-16
相关资源
最近更新 更多