我正在尝试为我的游戏构建一个简单的加载屏幕,并试图获得一个字体的皮肤。
当我尝试使用skin = game.manager.get("bin/ui/loading.json", Skin.class);
来获取皮肤时,会发生以下错误:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: File not found: bin\ui\loadingSkin.atlas (Internal)
at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:540)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:356)
at com.badlogic.gdx.assets.AssetManager.finishLoading(AssetManager.java:377)
at com.Sidescroll.game.LoadingScreen.show(LoadingScreen.java:32)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.Sidescroll.game.Sidescroll.create(Sidescroll.java:20)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: bin\ui\loadingSkin.atlas (Internal)
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136)
at com.badlogic.gdx.graphics.g2d.TextureAtlas$TextureAtlasData.<init>(TextureAtlas.java:103)
at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:58)
at com.badlogic.gdx.assets.loaders.TextureAtlasLoader.getDependencies(TextureAtlasLoader.java:34)
at com.badlogic.gdx.assets.AssetLoadingTask.handleSyncLoader(AssetLoadingTask.java:98)
at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:87)
at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:477)
at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:354)
... 6 more
在我当前的assets / ui文件夹中有5个文件:
loading_0.png - BitmapFont图像
loading.fnt - 字体文件
loading.pack - 使用TexturePacker打包单个图像
loading.png - TexturePacker图片
loadingSkin.json - Skin.json,其中描述了BitmapFont和LabelStyle
我试图使用assetmanager的部分:
//this is the beginning of the show method of my loadingScreen, nothing
//happened before
game.manager.load("bin/ui/loading.pack", TextureAtlas.class);
game.manager.finishLoading();
atlas = game.manager.get("bin/ui/loading.pack");
// do i need an atlas here ?
game.manager.load("bin/ui/loadingSkin.json", Skin.class);
game.manager.finishLoading();
skin = game.manager.get("bin/ui/loading.json", Skin.class);
问题是,我是否总是需要地图集?如果是,我如何创建一个,如果不是,为什么会发生错误?
编辑:我正在使用libgdx的1.5.4版,并且在我的项目中没有android答案 0 :(得分:1)
Skin有许多不同的结构,如:
Skin()
Skin(FileHandle skinFile)
Skin(FileHandle skinFile, TextureAtlas atlas)
Skin(TextureAtlas atlas)
如果您使用的是JSON版本的构造函数,那么您只需将json配置文件传递给它。皮肤需要有一些纹理图集,因此默认情况下,此选项会查找名为exatcly的.atlas文件,如json文件。这意味着当您使用文件名 loadingSkin.json :
时 game.manager.load("bin/ui/loadingSkin.json", Skin.class);
它将查找 loadingSkin.atlas 文件,因为没有这样的内容会导致错误。
现在你有两个选择:
创建名为json的文件,但带有atlas扩展名( .atlas与.pack完全相同 - 你只需更改扩展名或使用.atlas创建一个文件而不是.PackPacker中的.pack )
loading.pack -> loading.atlas
更改名称时要注意纹理.png文件! (.pack / .atlas文件的名称在里面 - 请与编辑一起检查)
使用另一个皮肤构造函数,如:
Skin(FileHandle skinFile, TextureAtlas atlas)
您正在将文件句柄传递给.json和纹理纹理的TextureAtlas实例
TextureAtlas atlas = game.manager.get("bin/ui/loading.pack", TextureAtlas.class);
Skin skin = new Skin( Gdx.files.internal("bin/ui/loadingSkin.json"), atlas);
答案 1 :(得分:1)
此行会导致错误:
game.manager.load("bin/ui/loadingSkin.json", Skin.class);
当我查看 SkinLoader 类&#39;来源我已经看到它默认添加 .atlas 来加载文件:
@Override
public Skin loadSync (AssetManager manager, String fileName, FileHandle file, SkinParameter parameter) {
String textureAtlasPath = file.pathWithoutExtension() + ".atlas";
...
所以看起来你的皮肤需要一个TextureAtlas。您可以使用https://libgdx-texturepacker-gui.googlecode.com/files/gdx-texturepacker-3.2.0.zip
创建TextureAtlas您可以创建名为 loadingSkin.atlas 的TextureAtlas,并将其放在 bin \ ui \ loadingSkin.atlas 下。如果要创建具有其他名称的图集并告诉加载器要使用哪个TextureAtlas,可以将 SkinParameter 传递给加载方法:
SkinLoader.SkinParameter loadingSkinParameter = new SkinLoader.SkinParameter();
loadingSkinParameter.textureAtlasPath = "YOUR_TEXTURE_ATLAS_PATH";
game.manager.load("bin/ui/loadingSkin.json", Skin.class, loadingSkinParameter);