如何访问三个JS中的scene.children元素?

时间:2013-08-22 16:02:29

标签: three.js

我在ThreeJS场景中添加了一些对象(使用scene.add(object))。我知道对象的名称,只想从scene.children中获取它的索引。

我尝试使用scene.children.indexOf("objectName")但它返回-1索引。任何人都可以建议我该怎么做?

由于

4 个答案:

答案 0 :(得分:7)

var object = scene.getObjectByName( "objectName" );

或以递归方式搜索场景图

var object = scene.getObjectByName( "objectName", true );

或者,您可以按ID搜索。

var id = scene.getObjectById( 4, true );

three.js r.60

答案 1 :(得分:0)

您收到一条警告文字 undefined ,因为您收到的对象不是value/text。您需要提醒我相信的scene.getObjectByName( "objectName" ).namescene.getObjectByName( "objectName" ).id

答案 2 :(得分:0)

我相信实际上可以回答你问题的是我用来清理场景的以下代码:

while (scene.children.length > 0) {
            scene.remove(scene.children[scene.children.length - 1]);
}

这样我就不需要通过其名称或ID访问元素。该对象只是从带有索引的数组中获取,因此它类似scene.children[i]

答案 3 :(得分:0)

相关文档:getObjectByIdgetObjectByNamegetObjectByName的重要提示:

  

请注意,对于大多数对象,名称默认为空字符串。您必须手动设置它才能使用此方法。

这可能就是为什么您获得undefined的原因。另外,如果您获得undefined,则尝试访问.name.id将会引发错误。如果要找回对象,则警报中会显示类似“ [object Object]”的字样。

我很难学到的另一个重要说明是,您需要传递给getObjectById的值是object.id,而不是object.uuid。另外,object.id本质上只是object数组中children的索引。

将它们放在一起:

// 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);