我有一个libgdx项目,它使用AssetManager加载资源,如下所示:
for (FileHandle f : Gdx.files.internal("textures").list("png") ) {
assetManager.load(f.toString(), Texture.class);
System.out.println("Asset queued for loading: " + f.toString());
}
assetManager.finishLoading();
System.out.println("Loaded assets: " + assetManager.getLoadedAssets());
当我运行桌面启动器时,这很好用,但是当我使用以下消息将其部署到html5时失败:
GwtApplication: exception: Asset not loaded: textures/rifleman_walking.png
Asset not loaded: textures/rifleman_walking.png
我已经加倍检查了文件名,只是为了确保没有像我这样的错误那样愚蠢的东西。我也有点因为它似乎只影响html5版本而被抛弃了。当我查看项目webroot中的assets /目录时,它确实包含代码中引用的所有内容。
请注意,在AssetManager
加载纹理之前,我的代码适用于桌面和html5,而不是通过硬编码文件名手动加载纹理。
我的理论:
当我忘记包含assetManager.finishLoading();
时,我对完全相同的文件得到完全相同的错误,因此我想知道是否有关于需要解决方法的html5部署的特殊内容。< / p>
此外,我有大量的调试信息,我只是通过System.out.println()
打印,我很乐意在Gwt文本区域看到这个,现在只在启动时打印错误。如何在同一窗口中启用System.out.println()
的输出?
阅读后,我发现在核心启动器中调用Gdx.app.setLogLevel(Application.LOG_INFO);
是可行的方法,但它似乎没有改变任何东西。如果我能够看到我打印的内容,它将有助于调试很多。
修改 违规行是:
protected Texture getAssetTexture(String textureName) {
return world.getPainter().getAssetManager().get(textureName, Texture.class);
}
我已经检查过textureName
被正确引用:文件rifleman_walking.png
位于资产的textures
子文件夹中。
答案 0 :(得分:1)
AFAIK,LibGDX在以HTML模式启动之前预先加载所有资源(因为在JS中无法同步访问图像)。所以我的猜测(没有看到实际的代码)是你试图在LibGDX准备好之前加载资产。
不要让我开始使用GWT中的System.out.println()。查看调试输出最简单的方法是调用相应的LibGDX日志函数。