我过去已经成功加载了所有图片,而且我使用的是OpenGL ES 2.0,所以图片不需要是2的幂(我有几个成功加载了#n&# 39; t)的
有问题的代码是:
Line 96: splashSheet = new Texture(Gdx.files.internal("test.png"));
这是我的错误消息:
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: test.png
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
at com.badlogic.gdx.graphics.Texture.load(Texture.java:175)
at com.badlogic.gdx.graphics.Texture.create(Texture.java:159)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:133)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:122)
at com.panini.game.GameScreen.show(GameScreen.java:96)
at com.badlogic.gdx.Game.setScreen(Game.java:59)
at com.panini.game.Splash.render(Splash.java:29)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:190)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)
Caused by: java.io.IOException: couldn't load pixmap
at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57)
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138)
... 11 more
这就是造成这个问题的原因。我可以加载this文件,但我无法加载this个文件。前者基本上只是我想要使用的截图。 我提供的第二张图片(不起作用)是原版。它被称为splashSprites.png,但我已经尝试将其重命名为test.png并正确引用它,但它仍然无法正常工作,所以我知道它绝对不是命名问题或任何事情。如果我将两个文件分别放在名为test1.png和test2.png的assets或bin目录中,那么如果我要求加载test1.png,则代码可以工作,但如果我要求加载test2.png则不行,所以它是不是我把文件放在错误的地方。这两个人似乎是最有可能的候选人,但我已经将他们排除在外。
我尝试过重新导出第一张图片之类的其他内容,但它从未奏效(工作是截图,这就是我在这里的原因)。我的猜测是它可能与其中一个图像中的alpha有关(因为它实际上是唯一与两者不同的东西 - 一个是alpha而另一个没有)但是那个&#39;不太可能,因为我能够加载一些其他具有alpha的纹理。我真的很难过。
提前致谢。
答案 0 :(得分:7)
我找到了答案。显然LibGDX不支持16位png(这是正确的吗?)因为在使用OS X上的预览将我的spritesheet转换为8位深度后,我发现问题已经消失。
感谢P.T.有关升级LibGDX的建议,因为我收到以下错误消息:
Caused by: java.io.IOException: couldn't load pixmap 8bit only
答案 1 :(得分:4)
在图片上运行pngcrush,使其变为更常见的PNG格式。
这个屏幕截图是用libGDX论坛的截图代码生成的吗?我也使用过它,并且导致PNG的数量巨大,我相信我在加载/编辑它们时遇到了一些问题。无论如何pngcrush
为我解决了这个问题。
pngcheck工具可能能够隔离您拥有的两张图片之间的差异。
在libGDX源代码中,我看到最近(11天前)对libGDX图像加载器的更改:https://github.com/libgdx/libgdx/commit/4fac29aef94e3afafdd47d71e60faf256fa171b0 (看起来IOException应该包含更多关于真正出错的信息),所以你可能会尝试针对libGDX nightlies运行?