Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 扩展三个.js类_Javascript_Three.js - Fatal编程技术网

Javascript 扩展三个.js类

Javascript 扩展三个.js类,javascript,three.js,Javascript,Three.js,我想扩展Three.js Object3D类,但不知道如何实现 有一个Stackoverflow问题,我已经读了,再读了,试过了,但没法让它对我起作用 有没有人能提供一些具体的代码来说明如何进行这项工作?以下是我目前的情况: var MyObject3D = function() { THREE.Object3D.call(this); MyObject3D.prototype = new THREE.CubeGeometry(); MyObject3D.prototype.

我想扩展Three.js Object3D类,但不知道如何实现

有一个Stackoverflow问题,我已经读了,再读了,试过了,但没法让它对我起作用

有没有人能提供一些具体的代码来说明如何进行这项工作?以下是我目前的情况:

var MyObject3D = function() {
   THREE.Object3D.call(this);
   MyObject3D.prototype = new THREE.CubeGeometry();
   MyObject3D.prototype.constructor = MyObject3D;
}
并创建一个实例:

var thing = new MyObject3D();
var testGeo = new THREE.CubeGeometry(10, 10, 10);
var testMat = new THREE.MeshPhongMaterial();
var testMesh = new THREE.Mesh(testGeo, testMat);
thing.add(testMesh);
但是调用MyObject3D实例的“add”方法会返回一个错误,即“thing”没有“add”方法


这是怎么回事?

您正在将原型设置为立方计量,它没有添加方法。根据您尝试实例化对象的方式,看起来您实际上希望对象具有网格原型

很可能您想要这样的东西:

var MyObject3D = function() {
    // Run the Mesh constructor with the given arguments
    THREE.Mesh.apply(this, arguments);
};
// Make MyObject3D have the same methods as Mesh
MyObject3D.prototype = Object.create(THREE.Mesh.prototype);
// Make sure the right constructor gets called
MyObject3D.prototype.constructor = MyObject3D;
然后将其实例化:

var testGeo = new THREE.CubeGeometry(20, 20, 20);
var testMat = new Three.MeshNormalMaterial();
var thing = new MyObject3D(testGeo, testMat);

非常感谢。当我创建问题时,CubeGeometry只是一个复制/粘贴错误,但你仍然解决了我的问题:)我在构造函数中设置了新类的原型。把它移到外面,把它修好了。我很好奇为什么这会有不同。(您可能已经注意到,我仍在学习Javascript中的OO。)原型在构造函数运行之前应用于对象实例,因此,当您在构造函数中设置MyObject3D.prototype时,这不会对使用该构造函数实例化的第一个对象生效。但是,在构造函数运行一次之后,原型会发生变化,因此该类型的所有未来对象都会具有您想要的原型。(但它们都会略有不同,因为您正在为每个对象实例化一个新对象!)我实际上有点理解这一点,这很奇怪。谢谢