2017-06-21 61 views
0

我使用a-frame做web-vr。我很好用,但我有一些情況不知道如何實施。 首先,我用光標放置一個攝像機,並將raycaster與對象「.trigger」相交。(A-Frame)如何停止物體與光標相交?

<a-entity camera="" look-controls="" position="" rotation="" scale="" visible=""> <a-entity cursor="fuse: true; fuseTimeout: 1500" position="0 0 -1" geometry="primitive: ring; radiusInner: 0.02; radiusOuter: 0.03" material="color: cyan; shader: flat" raycaster="objects: .trigger" rotation="" scale="" visible=""> <a-animation begin="click" easing="ease-in" attribute="scale" fill="forwards" from="0.1 0.1 0.1" to="1 1 1" dur="150"></a-animation> <a-animation begin="cursor-fusing" easing="ease-in" attribute="scale" fill="backwards" from="1 1 1" to="0.1 0.1 0.1" dur="1500"></a-animation> </a-entity> </a-entity>

,並創建一流的 「觸發」 一個實體。

<a-entity class="tigger" id="clip01" clip01="on: click; conditionId: ShowClipTrigger" data-is-trigger="true" geometry="primitive: plane; width: 2; height: 3" material=" src: #clip01-pic; opacity: 0.99;" position="-5.913 -3.544 4.675" rotation="-82.048 122.222 11.345" scale="" visible="" animation__move="" animation__rotate=""></a-entity>

的「.trigger」對象將觸發後點擊事件得到了一些行動。我的問題是如何在觸發點擊後禁用相交。我嘗試在點擊evnet之後從對象中刪除類「觸發器」,但它仍然可以與光標相交。

我搜索框架文檔raycaster,但沒有線索。

回答

0

去除白名單下課後,您需要刷新raycaster:

var raycasterEl = AFRAME.scenes[0].querySelector('[raycaster]'); 
raycasterEl.components.raycaster.refreshObjects(); 

,你也可以通過在事件偵聽器製作一個簡單的開關實現這一目標:

var switch=true; 
el.addEventListener("click", function(evt) { 
    if(switch){ 
     //doStuff 
     switch = false; 
    } 
}); 

或刪除監聽器完全像我一樣here

//listener 
this.doStuff = this.doStuff.bind(this); 
el.addEventListener("click", this.doStuff()); 
//function 
doStuff: function(){ 
this.el.removeEventListener("click",this.doStuff); 
} 
+0

我不希望遊標有任何與觸發器進行交互,所以第一個答案就是我需要的!謝謝! –

+0

很高興我能幫忙:) –