私はThree.jsで遊んでいて、太陽系の(単純な!)モデルを作っています。私はこれは私がこれまでにしようとしていたものである、惑星や衛星を構築するためにコンストラクタ関数を作成しようとしていますが、私はエラーが言ってます:コンストラクタ関数のためにTHREE.Meshクラスを拡張する方法
setShadowは()関数ではありません。
var body = function(size, color) {
this.sphere = new THREE.Mesh(new THREE.SphereGeometry(size, 32, 32),
new THREE.MeshLambertMaterial({color:color}))
return this.sphere
}
body.prototype = Object.create(THREE.Mesh.prototype);
body.prototype.constructor = body;
body.prototype.setShadow = function() {
this.sphere.castShadow = true
this.sphere.receiveShadow = true
}
あるいは、IはTHREE.SphereGeometry = geometry
とTHREE.MeshLambertMaterial = material
は、コンストラクタ関数の外に定義されているTHREE.MESH.call(this, geometry, material)
を用いて試みました。これは特に私がThree.jsを心配する必要があるのですか、それとも私はこれに間違って近づいていますか?
編集:オルタナティブ試み - >
var body = function() {
THREE.Mesh.call(this)
return this
}
body.prototype.setShadow = function() {
this.castShadow = true
this.receiveShadow = true
return this
}
body.prototype = Object.create(THREE.Mesh.prototype);
body.prototype.constructor = body;
var example = new body(new THREE.SphereGeometry(70, 32, 32), new THREE.MeshLambertMaterial({color:this.getRandColor()}))
すべてが正しく継承するように思えるが、私はsetShadow機能が正しく動作していない理由として困惑していますか?
EDIT 2:.call(this)
をしようとしたときに、実際にこのエラーを得た:
this.updateMorphTargets
THREE.Mesh
クラスを拡張しながら、あなたのコンストラクタでミスを犯した機能
(.setShadow私は、このソリューションを実装してもエラーは、「身体のインスタンス」と言ってます)関数ではありません。しかし、私がcastShadowとreceiveShadow = trueを設定してもうまく動作します。 – bpr
@bpr私はそれを試してみました(https://jsfiddle.net/ry04qqk5/)、それは私のためにうまくいきます。 – Wilt
お詫び申し上げます、私は本体のプロトタイプを設定する前にプロトタイプにsetShadowを追加しました!今すぐご利用ください!本当にありがとう – bpr