在javascript(three.js)中使用函数:.load()后,如何防止对象被破坏
How can I prevent an object to be destroyed after I used the function: .load() in javascript (three.js)
我正在努力防止我的对象在加载后被破坏。
var loader = new THREE.ColladaLoader();
var rescue;
loader.load(
'Improved_Person_Maker_better_quality.dae',
function(collada) {
scene.add(collada.scene);
collada.scene.position.set(-25, 1, 25);
collada.scene.rotation.x = -Math.PI / 2;
rescue = collada.scene;
},
function(xhr) {
console.log((xhr.loaded / xhr.total * 100) + '% loaded');
}
);
rescue.position.set(-20, 1, 25);
最后一条语句不可能,因为加载的网格已不存在。有办法拯救collada.sene吗?
加载程序是异步的。
这意味着rescue.position.set()
在加载器回调中定义rescue
之前被调用。
只需在回调中设置位置,您已经完成了此操作。
如果您稍后必须在代码中引用rescue
,则可以使用此模式
if ( rescue !== undefined ) {
// your code
}
three.js r.75
你可以试试这个:
var rescue;
var manager = new THREE.LoadingManager();
manager.onProgress = function(item, loaded, total) {
console.log(item, loaded, total);
};
manager.onLoad = function(){
rescue.position.set(-20, 1, 25);
};
var loader = new THREE.ColladaLoader(manager);
loader.options.convertUpAxis = true;
loader.load("<url path for the file>", function(collada) {
scene.add(collada.scene);
collada.scene.position.set(-25, 1, 25);
collada.scene.rotation.x = -Math.PI / 2;
rescue = collada.scene;
}, function(xhr) {
console.log((xhr.loaded / xhr.total * 100) + '% loaded');
});
}
Loading Manager为您提供了异步管理加载的灵活性,这样以后您就可以拥有多个文件。
非常感谢Stallion和Westlangley为我提供了异步加载的正确提示。
我在这里找到了一个解决方案,但我也会复制它。
解决方案是创建一个普通的THREE.Object3d()对象。可以将每个对象添加为另一个对象的子对象。所以我做了以下事情:
loadObject: function(){
var loader = new THREE.ColladaLoader();
var container = new THREE.Object3D();
loader.load(
'Improved_Person_Maker_better_quality.dae',
function ( collada ) {
container.add(collada.scene);
},
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
});
return container;
}
出于灵活性的原因,我创建了一个新功能。
相关文章:
- 如何防止sails.js在所有视图中传递req对象
- 如何防止范围对象被更改
- 如何防止bind在使用async.series时更改node.js中的原始对象
- 创建新对象后,如何防止丢失旧对象
- 防止可拖动对象被添加多次jQuery
- Meteor模板数据对象可防止javascript事件触发
- XUL文档与HTML文档对象有何不同
- 在javascript(three.js)中使用函数:.load()后,如何防止对象被破坏
- Javascript对象:这两个值有何不同
- 什么是声明性环境记录,它与激活对象有何不同
- javascript删除对象,防止内存泄漏
- 在比较和匹配两个对象列表时,防止结果列表中重复
- JQuery 可拖动 - 防止网格对象移动到同一位置
- 在后台发生什么,以防止调用更改此对象的绑定方法
- 将单选按钮绑定到复杂对象可防止选中
- 防止对象数组中出现重复项
- 如何防止对象/数组突变
- 如何防止机器人的新对象与以前的机器人移动到相同的位置
- JS:防止访问未定义对象的属性时出错
- 防止对象函数中的事件覆盖“this”