我往ThreeJS场景中添加了一些对象(使用scene.add(object)
)。我知道这个对象的名称,只想从scene.children中获取它的索引。
我尝试使用scene.children.indexOf("objectName")
,但返回-1索引。有人能建议我该怎么做吗?
谢谢
我往ThreeJS场景中添加了一些对象(使用scene.add(object)
)。我知道这个对象的名称,只想从scene.children中获取它的索引。
我尝试使用scene.children.indexOf("objectName")
,但返回-1索引。有人能建议我该怎么做吗?
谢谢
var object = scene.getObjectByName( "objectName" );
或者递归搜索场景图
var object = scene.getObjectByName( "objectName", true );
或者,您可以通过ID进行搜索。
var id = scene.getObjectById( 4, true );
three.js r.60
(我)
while (scene.children.length > 0) {
scene.remove(scene.children[scene.children.length - 1]);
}
这样我就不需要通过名称或id访问元素。对象只需通过索引从数组中获取,就像scene.children[i]
一样。
value/text
。你需要像这样警告一些东西:scene.getObjectByName("objectName").name
或者 scene.getObjectByName("objectName").id
。scene.children.indexOf("objectName")
scene.getObjectByName('objname');
anyMesh.name = 'objname';
scene.add( anyMesh );
getObjectByName
的重要提示:
请注意,对于大多数对象,默认情况下名称为空字符串。您需要手动设置它才能使用此方法。
这可能是您收到undefined
的原因。此外,如果您收到undefined
,尝试访问.name
或.id
将会抛出错误。如果您收到一个对象,您将在警报中看到类似于“[object Object]”的内容。
我从中吸取的另一个重要教训是,您需要传递给getObjectById
的值是object.id
,而不是object.uuid
。此外,object.id
本质上只是children
数组中object
的索引。
将所有内容放在一起:
// var object = new THREE.Mesh(...) or similar
object.name = 'objectName';
scene.add(object);
var retrievedObject = scene.getObjectById(object.id);
// or
var retrievedObject = scene.getObjectByName('objectName');
alert(retrievedObject.name);
var object = scene.getObjectByName( "objectName" );
来检查,结果得到了“undefined”。由于我对ThreeJS不是很了解,但我发现对象存储在scene.children
中。我们添加到场景中的每个对象都会添加到scene.children
的末尾。所以我写了这段代码:var lastIndex = scene.children.length - 1; endElement = scene.children[lastIndex];scene.remove(endElement);
这将删除我绘制的最后一个元素。我需要您的帮助,从scene.children
中获取一个元素的ID并与对象名称相关联。谢谢您。 - harman052