如何在LibGDX中查询当前正在加载的资源名称?
如何在LibGDX中查询当前正在加载的资源名称?
嘿,我来帮你搞定这个问题!你现在用AssetManager从assets.txt批量加载纹理资源,想要在render()方法里实时知道当前到底在加载哪一个资源,对吧?
默认情况下LibGDX的AssetManager并没有直接提供“获取当前加载资源名称”的方法,但我们可以通过给它加一个加载监听器轻松实现这个功能——监听器会在每个资源开始加载前触发回调,我们只要在这个回调里记录当前资源的名字就行。
具体操作步骤:
- 先在你的类里定义一个变量,专门用来存储当前正在加载的资源名称:
private String currentLoadingAsset; // 用来记录当前加载的资源路径
- 给
AssetManager设置一个AssetLoaderListener,在资源开始加载前把名字存到上面的变量里。记得要在加载资源之前设置监听器,不然第一个资源的加载可能会错过回调哦!
ASSETS = new AssetManager(); // 设置加载监听器 ASSETS.setLoaderListener(new AssetLoaderListener() { @Override public void beforeLoad(AssetDescriptor asset, FileHandle file) { // 这里的asset.name就是你调用load()时传入的路径字符串(也就是assets.txt里的每一行内容) currentLoadingAsset = asset.name; } @Override public void afterLoad(AssetDescriptor asset, FileHandle file) { // 可选操作:加载完成后可以清空变量,或者保留最后一个加载的资源名 // currentLoadingAsset = null; } }); // 接下来是你原来的批量加载代码 FileHandle assetHandle = Gdx.files.internal("assets.txt"); String text = assetHandle.readString(); String[] lines = text.split("\n"); for (String line : lines) { ASSETS.load(line, Texture.class); }
- 现在在
render()方法里,你就可以直接用currentLoadingAsset获取当前加载的资源名啦!结合update()方法判断加载状态:
@Override public void render() { // 先更新AssetManager的加载进度 if (!ASSETS.update()) { // 还在加载中,输出当前资源名 if (currentLoadingAsset != null) { System.out.println("当前正在加载:" + currentLoadingAsset); } // 顺便可以输出加载进度,方便调试 float loadProgress = ASSETS.getProgress(); System.out.println("加载进度:" + String.format("%.1f", loadProgress * 100) + "%"); } else { // 所有资源加载完成 System.out.println("所有资源都加载好啦!"); } }
小提醒:
beforeLoad回调里的AssetDescriptor还能提供更多信息,比如asset.type可以知道当前加载的是纹理还是其他类型的资源,file参数能拿到资源的文件句柄,按需使用就行。- 因为
AssetManager的update()是在主线程(render线程)调用的,监听器的回调也在同一个线程,所以currentLoadingAsset不会有线程安全问题,放心用就好!
备注:内容来源于stack exchange,提问作者Alexander Cowgill
相关产品推荐
相关产品推荐

