实际场景:加载其他包体资源时,fgui.UIPackage.loadPackage加载的可能是本地资源或网络资源,如果是网络资源的话客户端无法得知是否加载完成,通过fgui.UIPackage.getByName(pkgName)来判断,拦截不了打开UI后的远程图集加载失败
需求分析:想要加载失败或超时时有对应操作回调或异步处理
暂定代码如下:
`private isPkgReady(pkgName: string): boolean {
const pkg = fgui.UIPackage.getByName(pkgName);
if (!pkg) return false;
const items = pkg["_items"];
if (!items || items.length === 0) return false;
let isTextureError = false;
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (item.type === fgui.PackageItemType.Image && !item.texture) {
isTextureError = true;
Params.isDebug && console.error("纹理异常:", item.name);
}
}
if (isTextureError) return false;
return true;
}`
其中似乎图集atlas的绑定是异步的,loadPackage完成回调内无法通过第三种情况检测。
同时该需求是否应该修改为:先通过loadPackage加载到对应包体及图集,再打开界面更合适,使用Promise异步操作可行吗?