2017-11-09 3 views
0

Ich versuche Linie zu verwenden, wie diesThree.js - Wie kann auf die Funktionen von object3D.children zugegriffen werden?

myObject3D.children.forEach( 
    function(pChild){ 
     return pChild.position.multiplyScalar(myMultiplier) 
    } 
); 

und diese

myObject3D.children.forEach( 
    function(pChild){ 
     pChild.position.copy(myVector3) 
    } 
); 

Aber aus irgendwelchen Gründen scheinen Funktionen in untergeordneten Elementen von ‚myObject3D‘ inexistent zu sein. ("Uncaught TypeError: pChild.position.multiplyScalar is not a function")

Elemente in "myObject3D" sind jedoch "Mesh" -Objekte.

Kann jemand vorschlagen, was kann ich tun?

Dank

Antwort

0

Zuerst Ihr forEach Rückruf sollte nichts zurück.

Mit Ihrem zweiten Codesegment scheint nichts falsch zu sein.

Der folgende Code wird ohne Fehler ausgeführt.

var group = new THREE.Object3D(); 
 
var geo = new THREE.BoxBufferGeometry(10, 10, 10); 
 
var mat = new THREE.MeshBasicMaterial({ 
 
    color: "red" 
 
}); 
 
var mesh = new THREE.Mesh(geo, mat); 
 

 
group.add(mesh); 
 
group.add(mesh.clone()); 
 
group.add(mesh.clone()); 
 
group.add(mesh.clone()); 
 
group.add(mesh.clone()); 
 

 
var myVector3 = new THREE.Vector3(); 
 

 
group.children.forEach(function(pChild) { 
 
    pChild.position.multiplyScalar(5); 
 
    pChild.position.copy(myVector3) 
 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/88/three.js"></script>

Sie sicher, dass Sie Ihre Gruppe mit den richtigen Arten von Objekten sind bevölkern. Außerdem können Sie immer testen, ob eine Funktion verfügbar ist, bevor Sie sie verwenden:

if(obj.someFunction){ 
    obj.someFunction(); 
} 
+0

Vielen Dank für Ihre Antwort! Schließlich war das Problem meine Gruppe selbst. "myObject3D" wurde in einem Array gespeichert, das habe ich behoben und es funktioniert :) –

Verwandte Themen