尝试使用函数 flyUp()
来定位我的 pig
对象 position
var。但函数 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
或)那样初始化
等。此错误发生在 plnkrthis.tailSpiral
对象this.wingLscript.js
文件的 452 行。暂时注释掉这一行可以解决问题。所以基本上,您需要为tailSpiral
创建一个 ThreeJS 对象,就像您对其余部分所做的那样。对于第二个错误,据我所知,
pig
对象本身没有position
属性。相反,position
对象在body
对象中可用,而body
对象在pig
对象中可用。此错误发生在行:514,也将发生在:522。因此,这些行需要看起来像:TweenLite.to(pig.body.position, 2.0, { y: ... });
。最后,505 行的错误也是如此。
matrixWorld
属性不能直接用于position
对象。相反,一个body
对象位于它们之间。所以这一行需要看起来像:position.setFromMatrixPosition(pig.body.matrixWorld);
。
希望这有帮助。
关于javascript - Three.js:无法补间对象位置var(出现空错误),但对象本身实际上可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32020209/