A-Frame使用带有shake.js事件的远程控制

时间:2017-11-14 19:23:16

标签: aframe

我想在我的A-Frame项目中使用fernandojsg's teleport controls,但是我想要使用它的方式是shake.js,一次震动使远程传输线出现,另一次实际传送到哪里你选择了。

我已经看过这些文档并遇到了startEvents和endEvent属性,我想将它们映射到shake事件......对我而言,听起来我必须创建一个自定义组件来执行此操作,但是我想首先寻求帮助,看看这是不可能的。

到目前为止,我已经制作了this (glitch.com/ link)但到目前为止它还没有工作(请注意我在那里有一些其他的库,可以使用摇动,mousedown和类似的事件...我的计划是根据用户想要移动的方式激活或停用它们

    <a-entity id="player" wasd-controls tap-to-walk>
     <a-camera id="eyes" position="-.5 1.5 0" camera="" look-controls="" mouse-cursor="">
      <a-entity id="cursor" cursor="fuse: false;"
        position="0 0 -1"
        geometry="primitive: ring; radiusInner: 0.015; radiusOuter: 0.019"
        material="color: white; shader: flat"
        raycaster="far: 5; interval: 1000; objects: .clickable">
      </a-entity>
      <a-entity id="texto" text="value:Hola;align:center" position="0 -.3 -0.5"></a-entity>
      <a-plane position="0 .7 -1" material="transparent: true;  opacity: 0.5; color: #ffec04; shader:flat;"  scale="1 0.2 1"></a-plane>
    </a-camera>
    <a-entity
    teleport-controls="cameraRig: #player; teleport-origins: #eyes; startEvents:['shake','mousedown']">        </a-entity>
    <a-entity id="step" sound="src: #step1"></a-entity>
  </a-entity>

谢谢...

1 个答案:

答案 0 :(得分:0)

是的,您需要一些JS或自定义组件才能使shake.js和传送控件协同工作有两个原因:

  1. shake.jswindow teleport-controls没有收听的shake.js上的A-Frame场景之外发出事件
  2. startEvents只会发出一种事件类型,您需要区分endEventsAFRAME.registerComponent('shake-listener', { init: function () { var targetEl = this.el var count = 0 // you could also initialize the shake instance here window.addEventListener('shake', function () { if (++count % 2) { targetEl.emit('shakestart') } else { targetEl.emit('shakeend') } }) } })
  3. 但它并不需要非常复杂:

    shake-listener

    然后将teleport-controls="startEvents: shakestart; endEvents: shakeend"添加到与Items

    相同的实体中