Javascript player.position.x不是defined而是object move,为什么会出现错误?
尝试更新对象时出错。但是为什么呢?对象是否声明为玩家变量? 如何解决我可以从任何地方访问对象的问题Javascript player.position.x不是defined而是object move,为什么会出现错误?,javascript,three.js,Javascript,Three.js,尝试更新对象时出错。但是为什么呢?对象是否声明为玩家变量? 如何解决我可以从任何地方访问对象的问题 未捕获的TypeError:无法读取未定义的属性“position”您没有在任何地方调用buildobj,因此该变量未定义为您期望的对象,我如何修复它?我是否必须将该变量放入函数中然后返回它?从技术上讲,由于您已将其定义为全局变量,您可以像现在这样更改它,但似乎您并没有运行该函数(即buildobj)?还有,什么是init()?这个定义在哪里?在任何情况下,您都需要确保首先加载数据,然后才启动任何
未捕获的TypeError:无法读取未定义的属性“position”您没有在任何地方调用buildobj,因此该变量未定义为您期望的对象,我如何修复它?我是否必须将该变量放入函数中然后返回它?从技术上讲,由于您已将其定义为全局变量,您可以像现在这样更改它,但似乎您并没有运行该函数(即buildobj)?还有,什么是init()?这个定义在哪里?在任何情况下,您都需要确保首先加载数据,然后才启动任何循环。否则你会得到这个错误。所以我猜你会希望“callbackOnLoad”调用一个启动循环的函数。很可能是因为
update
在加载对象之前被调用。只需将该代码包装在一个if
语句中,如下所示:if(player){player.position.x+=1;}
这样它只在定义了播放器对象的情况下访问该对象。您没有在任何地方调用buildobj,因此该变量没有定义为您期望的对象,我如何修复它?我是否必须将该变量放入函数中,然后返回它?从技术上讲,由于您已将其定义为全局变量,您可以像现在这样更改它,但似乎您并没有运行该函数(即buildobj)?还有,什么是init()?这个定义在哪里?在任何情况下,您都需要确保首先加载数据,然后才启动任何循环。否则你会得到这个错误。所以我猜你会希望“callbackOnLoad”调用一个启动循环的函数。很可能是因为update
在加载对象之前被调用。只需将该代码包装在一个if
语句中,就像这样:if(player){player.position.x+=1;}
这样它就只访问定义了的player对象
var player;
//baut die objecte
buildobj = function () {
// instantiate the loader
loader = new OBJLoader2();
// function called on successful load
function callbackOnLoad(playership) {
player = playership;
playership.position.set(-7300, -7500, -1);
playership.rotation.set(Math.PI / 2, Math.PI / -2, 0);
scene.add(playership);
}
// load a resource from provided URL synchronously
loader.load('AmerWarship.obj', callbackOnLoad, null, null, null);
}
//gameprocess
update = function () {
player.position.x += 1;//error here
};
render = function () {
//player.position.x += 1;
renderer.clear();
renderer.render(scene, camera);
};
GameLoop = function () {
setTimeout(function () {
requestAnimationFrame(GameLoop);
}, 1000 / 60);
render();
update();
steuerung_tastatur_camera();
};
init(); //load init first!!