Javascript 使用Object3Ds填充对象文字-循环以填充网格
我试图用三个.jsJavascript 使用Object3Ds填充对象文字-循环以填充网格,javascript,loops,three.js,mesh,object-literal,Javascript,Loops,Three.js,Mesh,Object Literal,我试图用三个.jsObject3Ds填充一个对象文字,然后用网格填充Object3Ds。然而,我从我的代码中得到了一些奇怪的结果。我已经将这个问题提炼为仍然复制这个问题的最简单的代码行。在下面的场景中,thing1和thing2不接收网格,thing3接收所有三个网格: var objSet = { thing1: new THREE.Object3D(), thing2: new THREE.Object3D(), thing3: new THREE.Object3D(
Object3D
s填充一个对象文字,然后用网格填充Object3D
s。然而,我从我的代码中得到了一些奇怪的结果。我已经将这个问题提炼为仍然复制这个问题的最简单的代码行。在下面的场景中,thing1和thing2不接收网格,thing3接收所有三个网格:
var objSet = {
thing1: new THREE.Object3D(),
thing2: new THREE.Object3D(),
thing3: new THREE.Object3D()
};
for (key in objSet) {
objSet[key].add(aMesh);
objSet[key].add(anotherMesh);
objSet[key].add(yetAnotherMesh);
};
我的最终目标是动态创建一个对象文字,填充
Object3D
s,然后可靠地循环并向每个对象添加网格。问题出在哪里?谢谢你看 按照上面评论中的指导,我发现我的代码中出现奇怪行为的原因(console.logs表明,在运行期间,对象文本中的每个Object3D
都被网格填充,但最后一个Object3D
都是空的)网格只能使用一次,我需要将它们复制到Object3Ds
,否则它们只是在我指定它们时从一个跳到下一个。哎
修复非常简单快捷-只需在.add()
函数中将.clone()
添加到网格变量的末尾:
var objSet = {
thing1: new THREE.Object3D(),
thing2: new THREE.Object3D(),
thing3: new THREE.Object3D()
};
for (key in objSet) {
objSet[key].add(aMesh.clone());
objSet[key].add(anotherMesh.clone());
objSet[key].add(yetAnotherMesh.clone());
};
谢谢大家 @SirBraneDamuj-我简化了我之前的问题,并将其转发到这里。感谢您的反馈。这是因为在
for…in
循环的最后一次迭代中,键是thing3
,因此您将所有三个网格添加到对象集.thing3
。看起来您想要显式地设置objSet.thing1.add(aMesh);对象集内容2.添加(anotherMesh)代码>。或者,您应该创建一个对象数组和一个网格数组,然后根据它们的索引进行匹配。@FelixKling-谢谢您的回答。这可能是非常基本的,但为什么不在循环运行的过程中向thing1
和thing2
添加网格呢?@FelixKling-这是一个玩具示例;在最终的程序(动画)中将有几百个这样的任务,因此明确的任务是不存在的。两个阵列是可行的,但有点麻烦。猜猜我为什么不能将Object3D
s和网格成功地保存在同一个对象文本中?哦,你真的想将所有三个网格添加到每个元素吗?我不太了解three.js,但我想一个网格只能属于一个对象。因此,如果将网格添加到thing3
,它们将从thing2
中删除。如果要将每个网格添加到每个对象,可能必须创建网格的副本。