JavaScript/ThreeJS类型错误:无法读取属性';设置';未定义的
我正在尝试使用名为JavaScript/ThreeJS类型错误:无法读取属性';设置';未定义的,javascript,three.js,Javascript,Three.js,我正在尝试使用名为Model的三个js创建一个自定义对象,它由我定义的其他自定义对象组成,例如Part。这就是我得到错误的地方: const Model = function() { this.mesh = new THREE.Object3D(); this.mesh.name = 'model'; //creates instance of part this.lowerPart = new Part(); this.lowerP
Model
的三个js创建一个自定义对象,它由我定义的其他自定义对象组成,例如Part
。这就是我得到错误的地方:
const Model = function() {
this.mesh = new THREE.Object3D();
this.mesh.name = 'model';
//creates instance of part
this.lowerPart = new Part();
this.lowerPart.position.set(1, 2, 3, -75); //TypeError here
this.lowerPart.rotation.set(0, 0, 0);
this.mesh.add(this.lowerPart);
}
但是,当我运行我的程序时,它说它无法读取未定义的属性“set”,引用this.lowerPart.position.set(1,2,3,-75)代码>
下面是我基本上是如何定义部分的:
const Part = function () {
this.mesh = new THREE.Object3D();
this.mesh.name = 'part';
const partShape = new THREE.Shape();
partShape.lineTo( 40, 80 );
partShape.lineTo( 60, 80 );
partShape.lineTo( 60, 100 );
partShape.lineTo( 40, 100 );
//extrude settings defined....
const partGeometry = new THREE.ExtrudeGeometry(partShape, extrudeSettings);
const partMesh = new THREE.Mesh(partGeometry, new THREE.MeshStandardMaterial({
color: 0x1c4bc9,
flatShading: true
}));
this.mesh.add(partMesh);
};
Part.prototype = Object.create(THREE.Object3D.prototype);
Part.prototype.constructor = Part;
在我的函数Model
中要注意的另一件事是,当创建this.lowerPart
时,它被标记为未使用。我不确定原因,因为Object3D类型具有这些属性
控制台还证明this.lowerPart
是部分的一个实例
我已经查看并尝试了与我的问题相关的大多数建议的StackOverflow问题。在所有这些中,这似乎是最相关的:
然而,这对我不起作用
任何关于如何解决我的问题的建议都将不胜感激 如果您想从THREE.Object
派生Part
,您还必须在Part
的构造函数中执行以下代码行(它应该是ctor中的第一行):
只有这样,才能通过零件的实例访问位置
、旋转
或缩放
等属性谢谢您的回复!不幸的是,当我添加这个时,它给了我一个错误:THREE.Object3D.add:object不是THREE.Object3D的实例。
我想它可能是指我在Model=newmodel()中调用我的Model
函数的地方代码>但是它没有给出错误发生的确切位置。我还看到我在添加THREE.Object3D.call(this)的地方得到了另一个错误
表示TypeError:无法设置未定义的属性“uuid”
是否有机会将您的代码共享为一个?在这种情况下,当社区可以调试您的问题时,提供帮助会容易得多。是的,我刚刚添加了它:我是JSFIDLE新手,所以我不确定如何将JS文件附加到HTML,但我现在掌握的是我程序的基础知识。好吧,我想您的回答确实解决了我的问题!我想问题是我制作了一个模型的实例,我需要它是一个函数,而不是我的例子中的变量。谢谢你的帮助!
THREE.Object3D.call( this );