Javascript 无法读取属性';几何学&x27;未定义的three.js的
我有这两个函数,每个函数调用另一个函数。 每次调用“NewSphere”函数时,我都会创建一个球体,并通过在“RemoveSphere”函数中设置位置来移除每个球体。 有时在删除过程中,我会出现以下错误:“无法读取未定义的属性‘几何体’”Javascript 无法读取属性';几何学&x27;未定义的three.js的,javascript,html,three.js,Javascript,Html,Three.js,我有这两个函数,每个函数调用另一个函数。 每次调用“NewSphere”函数时,我都会创建一个球体,并通过在“RemoveSphere”函数中设置位置来移除每个球体。 有时在删除过程中,我会出现以下错误:“无法读取未定义的属性‘几何体’” 行“obj.geometry.dispose();”,我无法删除一些球体。当您使用var obj=scene.getObjectByProperty('uuid',ID'),它得到了未定义的,因为它没有找到任何具有该名称的对象 然后,当您尝试获取它的几何体时,
行“obj.geometry.dispose();”,我无法删除一些球体。当您使用
var obj=scene.getObjectByProperty('uuid',ID')代码>,它得到了未定义的
,因为它没有找到任何具有该名称的对象
然后,当您尝试获取它的几何体时,它相当于未定义的.geometry
,它不存在。您必须想出一种更好的方法来生成ID
,这样在设置和检索时它是相同的。也许可以将它转换成一个字符串,使用varid=(x*10)+“uz”代码>
另外,不要覆盖对象的UUID,您可能会用Three.js在内部破坏某些东西。因此,您可以使用scene.getObjectByName()
检索它 sphere.uuid=ID代码>这行中的ID
是什么?我尝试为ID=(X*10)+Z的每个球体创建唯一的编号似乎,您正在编写网格的.uuid
属性,这样做。three.js在内部使用的uuid
。我认为是这样,不应该改变uuid
,但我不知道如何移除具有特定位置的球体。。。
function NewSphere(x, z) {
var sphereGeometry = new THREE.SphereBufferGeometry(10 * factor, 32, 32);
var sphereMaterial = new THREE.MeshBasicMaterial({ color: SphereColor, wireframe: false });
var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
sphere.uuid = ID;
sphere.position.setX(x);
sphere.position.setZ(z);
objects.push(sphere);
scene.add(sphere);
}
function RemoveSphere(Xp, Zp) {
ID = Xp * 10 + Zp;
var obj = scene.getObjectByProperty('uuid', ID);
obj.geometry.dispose();
obj.material.dispose();
objects.pop(obj);
scene.remove(obj);
renderer.renderLists.dispose();
}