为什么这个THREE.Mesh()对象在THREE.JSONLoader()中明确定义时是未定义的? 这是我的代码......
1: var player;
2: var playerCallback = function(geo, mats){
3: player = new THREE.Mesh(geo, new THREE.MeshFaceMaterial(mats));
4: console.log("Loaded Model: " + 'resources/models/Player.js');
5: }
6: JSONLoader.load('resources/models/Player.js', playerCallback);
7: player.position.set(0, 20, 20);
8: player.physics = false;
9: scene.add(player);
我得到的错误是针对“ 7 ”行,因为该播放器未定义。 在此之前,“已加载的模型:resources / models / Player.js ”显示为应该如此。
答案 0 :(得分:0)
因为它是在执行playerCallback块之前执行的。
JSONLoader加载外部文件,但这需要时间。在等待加载该文件时,它继续执行您的脚本。
因此,在加载外部文件时,它会尝试访问未定义的变量(播放器)。为了使其正常工作,您需要确保您的程序仅在定义后才尝试访问全局播放器。
要修复代码,请执行以下操作:
var player;
var playerCallback = function(geo, mats){
player = new THREE.Mesh(geo, new THREE.MeshFaceMaterial(mats));
console.log("Loaded Model: " + 'resources/models/Player.js');
performPlayerActions();
}
JSONLoader.load('resources/models/Player.js', playerCallback);
function performPlayerActions() {
player.position.set(0, 20, 20);
player.physics = false;
scene.add(player);
}
我所做的就是将您的播放器代码移动到另一个函数中,然后在我们确定已经定义了播放器之后(在加载外部文件之后)调用它。