试图使用函数 flyUp()
position
var 定位我的 pig
对象。但是函数flyUp()
中的pig.position
正在收到null
错误。但是,对象pig
实际上在flyUp()
函数中可用。我也在Pig
和createPig
上收到错误THREE.Object3D.add: object not an instance of THREE.Object3D
.我在这里做错了什么?
这是一个笨蛋
以下是相关的 js:
function createPig(){
pig = new Pig();
scene.add(pig.threegroup);
}
Pig.prototype.update = function() {
this.wingAngle += this.wingSpeed/globalSpeedRate;
this.wingL.rotation.z = -Math.PI / 4 + Math.cos(this.wingAngle) * this.wingAmplitude;
this.wingR.rotation.z = Math.PI / 4 - Math.cos(this.wingAngle) * this.wingAmplitude;
}
function getFlyPosition(){
scene.updateMatrixWorld(true);
var position = new THREE.Vector3();
position.setFromMatrixPosition(pig.matrixWorld );
objectHeight = position.y;
flyTime = Math.round(position.y/30);
console.log('cube Y = ' + position.y + ', Flytime = ' + flyTime);
}
function flyUp(){
console.log(this.pig);
if (objectHeight < maxHeight) {
TweenLite.to(pig.position, 2.0, {y: "+=45", ease:Expo.easeOut} );
} else {
flyDown();
}
}
function flyDown(){
getFlyPosition();
TweenLite.to(pig.position, flyTime, {y: 25, ease:Sine.easeInOut} );
}
以下是完整的错误:
**error 1**
THREE.Object3D.add: object not an instance of THREE.Object3D. undefinedT
HREE.error @ three.js:35
THREE.Object3D.add @ three.js:7770
Pig @ script.js:452
createPig @ script.js:160
(anonymous function) @ script.js:553
**error 2**
Uncaught Cannot tween a null target.(anonymous function) @ TweenMax.min.js:16
D.to @ TweenMax.min.js:17
flyUp @ script.js:515
handleMouseDown @ script.js:100
**error 3**
Uncaught TypeError: Cannot read property 'elements' of undefined
THREE.Vector3.setFromMatrixPosition @ three.js:2389
getFlyPosition @ script.js:505flyDown @ script.js:522
handleMouseUp @ script.js:104
这是我能够调试的内容:
-
第一个错误是因为您没有像初始化其他对象(如
this.torso
或this.wingL
等(那样初始化this.tailSpiral
对象。此错误发生在 plnkrscript.js
文件的第 452 行。暂时注释掉此行可解决此问题。所以基本上,你需要为tailSpiral
创建一个 ThreeJS 对象,就像你正在做的其余部分一样。 -
对于第二个错误,据我所知,
pig
对象本身没有position
属性。相反,position
对象在pig
对象中可用body
对象中可用。此错误发生在行:514,也将发生在:522。因此,这些行需要看起来像这样:TweenLite.to(pig.body.position, 2.0, { y: ... });
. -
最后,第 505 行的错误也是如此。属性
matrixWorld
不能直接用于position
对象。相反,一个body
对象位于它们之间。所以这行需要看起来像:position.setFromMatrixPosition(pig.body.matrixWorld);
.
希望这有帮助。