我更新到r99,现在发现我正在执行的所有检查实例都不再起作用。
例如,当我遍历此对象并检查子对象是否为Mesh时,它将返回为false。但是,如果我看一下child.constructor.name
,它就是报告为Mesh。
object.traverse(child => {
console.log(child);
if (child instanceof THREE.Mesh) {
console.log('THREE.Mesh');
} else {
console.log('NOT THREE.Mesh');
}
console.log(child.constructor.name);
console.log('----');
}
当我简单地更新库时,什么地方可能出了错/更改?
答案 0 :(得分:1)
不能完全确定如何遍历的object
是在看不到该代码的情况下创建的,但是正在使用的加载程序有可能改变了其方法。
检查类型时,建议您使用内置的.type
属性,这也是Three.js在内部用来区分其处理的对象类型的属性。使用instanceof
的问题在于,在处理子类时,您可能会得到模棱两可的结果:
var myMesh = new THREE.Mesh();
console.log(myMesh instanceof THREE.Mesh); // True
console.log(myMesh instanceof THREE.Object3D); // Also true
但是,如果您检查.type
属性,则可以更加确定所处理的内容。
console.log(myMesh.type === "Mesh"); // True
console.log(myMesh.type === "Object3D"); // False