为什么这个非常明确定义(在JSONLoader的回调中)的对象读为未定义?
Why does this very clearly defined (in callback to JSONLoader) object read as undefined?
为什么这个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",说玩家是未定义的。在此之前,"Loaded Model: resources/models/Player.js"会按原样显示。
因为它是在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);
}
我所做的就是将你的播放器代码移到另一个函数中,然后在我们确定播放器已经被定义(在外部文件加载之后)之后调用它。
相关文章:
- 将对象传递给原型回调
- 从回调内部填充对象
- Javascript:对回调创建的对象执行方法
- Javascript-如何从字符串/对象引用回调
- Javascript使用本地存储,回调对象并用Json更改为一个字符串以用于填充函数
- 如何将状态对象/数据传递给(异步)ajax 回调
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- 作用域,在回调中丢失对对象的引用
- NodeJS fs.readdr-将回调内部作为对象返回
- 在对象内完成ajax调用后触发Javascript回调
- 使用回调处理程序调用函数内部的父对象方法
- 从嵌套在函数中的Node.js回调返回对象
- 带有回调的Javascript对象方法中的递归
- 当查询返回对象时,Express Mongo回调返回undefined
- 如何在回调函数中为正确的对象添加值
- Javascript:如何在回调中设置父对象变量
- 什么's传递对象的最佳或最常见方式'的方法作为回调
- 为什么这个带有对象调用函数的Javascript setInterval在传入回调时不计算内部参数
- 如何构建一个接受回调对象的javascript类
- NodeJs接收回调对象