我已将这个问题作为“巨大问题”的一部分提出,但建议分部分提出。这是我之前问题的一部分。我之前的问题是:这里
我一直在使用 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;
};
});
但是在使用release 54时,据说要使用object.traverse却发现很难一样。如何使用版本 54 替换上述代码?我在使用版本 54 时遇到的错误是:
请帮我解决这个问题。
您发送给“traverseHierarchy”函数的“mesh”变量是 Object3d 吗? 如果是这样,您是否尝试过“mesh.children”,它应该返回子对象数组,或者您可以在网格对象上使用遍历函数。
参见:http://mrdoob.github.com/third.js/docs/54/#Reference/Core/Object3D
mesh.traverse(function (child) {
const 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;
};
});
深入挖掘,你会找到答案。
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 );
}
},
只需使用对象遍历方法来隐藏 Three.js 中的网格。在我的代码中根据对象名称隐藏对象
object.traverse ( function (child) {
if (child instanceof THREE.Mesh) {
if (child.name.includes("3F")) {
child.visible = true;
} else {
child.visible = false;
}
}
});