javascript - 如何在 Three.js 中返回对象而不是将其添加到场景中?(FBXLoader)
问题描述
如果我在 Javascript 中调用此函数,它会起作用,并将对象添加到场景中:
var loader = new THREE.FBXLoader();
function returnFBX(PATH, scene) {
loader.load('obj/' + PATH + '.fbx', function (object) {
scene.add(object);
});
}
但是,如果我更换:
scene.add(object);
和:
return object;
它似乎返回未定义。
我尝试使用 Promises 以及加载管理器,但两者似乎都只能将对象添加到场景中,而不能返回对象。
我认为这是因为彼此之间有两个嵌套函数,并且加载是异步的。但我不确定如何解决这个问题,因为这是加载对象的标准方式。
解决方案
load
是异步的——要么使用回调要么使用等待,即
const afterload = object => { console.log(object); }
function returnFBX(PATH, scene) {
loader.load('obj/' + PATH + '.fbx', function (object) {
afterload(object);
});
}
或者
async function returnFBX(PATH, scene) {
return loader.load('obj/' + PATH + '.fbx', function (object) {
return object;
});
}
let afterloadObject = await returnFBX( ... )
推荐阅读
- python - 根据旧数据帧中重新格式化的列创建新数据帧
- datepicker - Datepicker - 无效的日期和班级风格
- javascript - 具有量角器和打字稿的流畅界面
- visual-studio - .NET 完整框架项目在哪些版本的 Visual Studio 中支持 PackageReference?
- javascript - 无法调用 null 的方法“showRows”
- oracle - 当我尝试在 Oracle 11g 中进行 impdp 时,参数值无效和转储文件规范错误
- delphi - 为什么部署管理器想要部署比必要更多的文件?
- android - 原始错误 packageAndLaunchActivityFrommanifest failed
- javascript - 简化另一个 else 中的 if/else
- javascript - 在 Appium 上调用特定测试