7

我过去已经成功加载了所有图像,并且我使用的是 OpenGL ES 2.0,因此图像不需要是 2 的幂(我有几个成功加载但不是)。

有问题的代码是这样的:

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

这就是使这成为一个有趣的问题的原因。我可以加载这个文件,但我不能加载这个。前者基本上只是我要使用的截图的裁剪截图。我提供的第二张图片(不起作用)是原图。它被称为 splashSprites.png 但我尝试将其重命名为 test.png 并正确引用它但它仍然不起作用,所以我知道这绝对不是命名问题或任何东西。如果我将这两个文件分别放在名为 test1.png 和 test2.png 的资产或 bin 目录中,那么如果我要求加载 test1.png,则代码有效,但如果我要求加载 test2.png,则代码无效,所以这不是我m 也将文件放在错误的位置。这两个似乎是最有可能的候选人,但我已经排除了他们。

我尝试了其他方法,例如重新导出第一张图像等,但它从未奏效(起作用的是截屏,这就是我在这里的原因)。我的猜测是它可能与其中一张图像中的 alpha 有关(因为这确实是与两者不同的唯一东西 - 一个有 alpha 而另一个没有)但这不太可能,因为我能够加载其他一些确实有 alpha 的纹理。我真的很难过。

提前致谢。

4

2 回答 2

7

我找到了答案。显然 LibGDX 不支持 16 位 png(对吗?),因为在 OS X 上使用 Preview 将我的 spritesheet 转换为 8 位深度后,我发现问题消失了。

感谢 PT 提供升级 LibGDX 的建议,因为这就是我收到以下错误消息的方式:

Caused by: java.io.IOException: couldn't load pixmap 8bit only
于 2013-01-05T21:52:41.840 回答
4

在图像上运行pngcrush以将其转换为更常见的 PNG 格式。

这个截图是用 libGDX 论坛的截图代码生成的吗?我也使用了它,但生成的 PNG 非常大,我相信我在加载/编辑它们时也遇到了一些问题。无论如何pngcrush为我解决了这个问题。

pngcheck工具可能能够隔离您拥有的两个图像之间的不同之处

查看 libGDX 源代码,我看到最近(11 天前)对 libGDX 图像加载器的更改:https ://github.com/libgdx/libgdx/commit/4fac29aef94e3afafdd47d71e60faf256fa171b0 (看起来 IOException 应该包含更多关于真正出错了),所以您可以尝试针对 libGDX nightlies 运行?

于 2013-01-05T19:42:31.960 回答