我正在尝试使用名为Model
的ThreeJS创建一个自定义对象,该对象由我定义的其他自定义对象组成,例如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);
。
这是我基本定义Part
的方式:
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
是Part
的实例。
我已经查看并尝试了与我的问题有关的大多数建议的StackOverflow问题。在所有这些中,这似乎是最相关的:Uncaught TypeError: Cannot read property 'set' of undefined 但是,它对我不起作用。
任何有关如何解决问题的建议,将不胜感激!
答案 0 :(得分:1)
如果要从Part
派生THREE.Object
,还必须在Part
的构造函数中执行以下代码行(它应该是ctor中的第一行) :
THREE.Object3D.call( this );
只有这样,才可以使用position
的实例访问rotation
,scale
或Part
之类的属性。