我正在尝试通过名为createObject的函数加载collada模型,并通过更改其在animate()函数中的位置来移动我的collada。
我尝试过的是声明一个var mario,然后调用init();。和animate();。 在init();中我调用函数createObject并进行动画处理,更改其位置,但是由于在if(mario!== undefined)中什么也没发生,因此从未定义对象。
var mario;
init();
animate();
在init()中:
createObject(mario,"dae/mario.dae",50,50,50,0,-28,0,0,0);
在animate()中:
requestAnimationFrame( animate );
if ( mario !== undefined ) {
console.log("working!");
mario.position.z += 1;
}
render();
stats.update();
我的函数createObject():
function createObject(object,src,size1, size2, size3, posX,posY, posZ, rotation,audio){
// loading manager
var loadingManager = new THREE.LoadingManager(function(){
scene.add( object );
});
// collada
var loader = new THREE.ColladaLoader( loadingManager );
loader.load( src, function ( collada ) {
object = collada.scene;
object.scale.set(size1,size2,size3);
object.position.x = posX;
object.position.y = posY;
object.position.z = posZ;
object.rotation.z = rotation;
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.castShadow = true;
child.receiveShadow = true;
}
});
if(audio)
object.add(audio);
});
}
因此该对象已加载,但不会移动,console.log也不会打印任何内容。 有谁可以帮助我吗 ?
谢谢。
答案 0 :(得分:0)
将模型分配给功能参数object
不会将值分配给mario
。建议您删除函数createObject()
的第一个参数,并将collada.scene
直接分配给全局变量mario
。与本示例中的方法相同:
答案 1 :(得分:0)
它可以通过init()来实现:
loader.load('dae/mario.dae', function ( collada ) {
mario = collada.scene;
setObject(mario,50,50,50,0,-28,0,0,0);
scene.add( mario );
} );
在我的函数setObject中,我只设置大小和位置等。
您是说对所有文件使用相同的onLoad()回调吗?