2017-02-26 43 views
0

繼我在上一個問題中ngokevin提出的方法有幫助的改變之後,我現在試圖在兩個實體(每個單獨的相機的一個孩子)之間交換遊標組件。但是,我看到兩種行爲沒想到:如何通過實體的setAttribute正確添加和刪除遊標組件?

  • 當我打電話entityEl.removeAttribute(「光標」),它刪除光標組件,但保留默認添加raycaster部件後面。 (演示:http://codepen.io/anon/pen/oZgJOg
  • 當我調用entityEl.setAttribute('遊標')時,我沒有注意到在檢查器中的實體的任何增加。 (演示:http://codepen.io/anon/pen/vxEvbG

我在哪裏可以驗證只是第一種情況後調用.removeAttribute(「raycaster」)可以解決這個問題,我不太肯定什麼阻止工作將光標。以下是第二個演示的組件:

AFRAME.registerComponent('add-cursor-on-click', { 
    init: function() { 
    this.el.setAttribute('cursor'); 
    this.el.addEventListener('click', function() { console.log("Received click ev."); }); 
    } 
}); 

<a-entity id="onlyTheCursorAfterClick" add-cursor-on-click></a-entity> 

與往常一樣,任何見解都將不勝感激。

回答

0

這似乎是刪除生命週期的處理程序光標組件最近加入,因此只有正確的行爲目前在主,看到這樣拉請求:https://github.com/aframevr/aframe/pull/2397

光標成分也並不重視的事件對上其init 。它等待render-target-loadedhttps://github.com/aframevr/aframe/blob/2c0d9ed1efd93df841d207da5e7d2d69c67d8d3a/src/components/cursor.js#L50

所以在組件的初始化,如果你想刪除光標組件,在組件的初始化,您需要:

if (!canvas) { 
     this.el.sceneEl.addEventListener('render-target-loaded', this.init.bind(this)); 
     return; 
} 

http://codepen.io/jhsu/pen/XMJQmE

雖然,作爲您看到了,您需要手動移除raycaster仍然

this.el.removeAttribute('raycaster'); 

對於添加cursor組件,你要傳遞數據的組件

this.el.setAttribute('cursor', {}); 

的原因是,有一個undefinedcheck when instantiating a component

相關問題