2017-07-21 3 views
0
export class ColliderComponent { 

    constructor() { 
    this.observer = this.mutationObserver();  
    this.aframe(); 
    } 


    //Registers the AFRAME component. 
    aframe(){ 
    const __this = this; 
    AFRAME.registerComponent('collider', { 
     schema: { 

     }, 
     init: function() { 
      console.log("The element to be observed is:",this.el); 

      __this.observer.observe(this.el, {characterData:true, subtree:true, attributes: true, attributeFilter: ['position'], childList : true}); 
     }, 

     tick : function(){ 
     console.log(this.el.getObject3D('mesh').position); 
     } 
    }); 

    } 

    private tick(){ 

    } 

    private mutationObserver() : MutationObserver{ 
    return new MutationObserver(mutations => { 
     mutations.forEach(mutation => { 
     console.log("Changed position"); 
     }); 
    }); 
    } 

} 

Ich arbeite an der Erstellung eines einfachen Collider. Ich werde die Elemente mit der Komponente "Collider" verfolgen und prüfen, ob sie sich überschneiden, indem Sie intersectsBox verwenden. Leider kann ich den MutationObserver nicht zum Laufen bringen. Ich würde diesen Ansatz lieber anstelle des Häkchens verwenden, da er die Ausführung pro Frame startet, wenn sich die Elemente bewegen.Ist es möglich, Mutation Observer mit einem Three js-Element zu verwenden - A-Frame?

Irgendwelche Vorschläge?

+0

Ich habe auch versucht, mit der Position getObject3D ('Mesh') zu überprüfen. Aber das löst nichts aus, wenn ich die Animationskomponente von A-Frame verwende. –

Antwort

1

können Sie

el.addEventListener('componentchanged', function (evt) { 
    if (evt.detail.name === 'position') { 

    } 
}); 

verwenden Aber Polling/über tick Ticken ist synchron und wahrscheinlich noch kein schlechter Weg zu gehen.

+0

Überflüssig. Die Legende selbst antwortet mir. Ich werde es versuchen und zurück posten. Danke! –

+0

Die Legende selbst * –

+0

Ehrfürchtig. Alles funktioniert wirklich gut. Ich werde mit der Komponente arbeiten, und wenn ich fertig bin, werde ich sie in Github veröffentlichen. –

Verwandte Themen