我想在我的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>
谢谢...
答案 0 :(得分:0)
是的,您需要一些JS或自定义组件才能使shake.js
和传送控件协同工作有两个原因:
shake.js
在window
teleport-controls
没有收听的shake.js
上的A-Frame场景之外发出事件startEvents
只会发出一种事件类型,您需要区分endEvents
和AFRAME.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')
}
})
}
})
但它并不需要非常复杂:
shake-listener
然后将teleport-controls="startEvents: shakestart; endEvents: shakeend"
添加到与Items