我已将这个问题作为巨大问题的一部分提出,但建议部分提问。这是我上一个问题的一部分。我之前的问题是:Here
我一直在使用Three.js Release 50并且能够在以下帮助下显示/隐藏对象(在我的应用程序中,它是一个网状物):
THREE.SceneUtils.traverseHierarchy(mesh,function(child){
var z = document.getElementById("cameras").selectedIndex*5 -10;
if (z === -10){
child.visible = true;
} else if (child.position.z !== z){
child.visible = false;
} else {
child.visible = true;
};
});
但是在使用版本54时,据说使用,object.traverse却发现很难相同。如何使用版本54替换上面的代码?我在使用版本54时遇到的错误是:
请帮我解决这个问题。
答案 0 :(得分:9)
'mesh'变量是否正在将'traverseHierarchy'函数发送给Object3d? 如果是这样,你试过'mesh.children',它应该返回一个子对象数组,或者你可以在网格对象上使用遍历函数。
请参阅:http://mrdoob.github.com/three.js/docs/54/#Reference/Core/Object3D
mesh.traverse(function(child) {
var z = document.getElementById("cameras").selectedIndex * 5 - 10;
if (z === -10) {
child.visible = true;
} else if (child.position.z !== z) {
child.visible = false;
} else {
child.visible = true;
};
});
答案 1 :(得分:1)
深入挖掘你会发现的答案。
object.traverseHierarchy()被重命名为object.traverse()
$ grep -A10 'traverse: function' build/three.js
traverse: function ( callback ) {
callback( this );
for ( var i = 0, l = this.children.length; i < l; i ++ ) {
this.children[ i ].traverse( callback );
}
},
答案 2 :(得分:1)
只需使用对象遍历方法隐藏三个网格中的网格。在我的代码中,根据名称隐藏对象
object.traverse ( function (child) {
if (child instanceof THREE.Mesh) {
if (child.name.includes("3F")) {
child.visible = true;
} else {
child.visible = false;
}
}
});