Java 使用纹理时libgdx未加载文件

Java 使用纹理时libgdx未加载文件,java,android,opengl-es,libgdx,game-engine,Java,Android,Opengl Es,Libgdx,Game Engine,好的,我先从libgdx开始,然后从以下几个教程开始。。。我做的第一对夫妇进展顺利,但我现在正试图遵循一个稍微复杂一点的,虽然它有点过时,通过谷歌和我自己的知识,我一直能够解决问题,直到现在。。。基本上,我试图在矩形上加载纹理,这里是最相关的代码 public WorldRenderer(World world, boolean debug) { this.world = world; this.cam = new OrthographicCamera(CAMERA_WI

好的,我先从libgdx开始,然后从以下几个教程开始。。。我做的第一对夫妇进展顺利,但我现在正试图遵循一个稍微复杂一点的,虽然它有点过时,通过谷歌和我自己的知识,我一直能够解决问题,直到现在。。。基本上,我试图在矩形上加载
纹理
,这里是最相关的代码

public WorldRenderer(World world, boolean debug) {
      this.world = world;
      this.cam = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT);
      this.cam.position.set(CAMERA_WIDTH / 2f, CAMERA_HEIGHT / 2f, 0);
      this.cam.update();
      this.debug = debug;
      spriteBatch = new SpriteBatch();
      loadTextures();
}

 private void loadTextures() {
      bobTexture = new  Texture(Gdx.files.internal("bob_01.png"));
      blockTexture = new Texture(Gdx.files.internal("block.png"));
     }
 public void render() {
      spriteBatch.begin();
       drawBlocks();
       drawBob();
      spriteBatch.end();
      if (debug)
       drawDebug();
     }
 private void drawBob() {
      Bob bob = world.getBob();
      spriteBatch.draw(bobTexture, bob.position.x * ppuX, bob.position.y * ppuY, Bob.SIZE * ppuX, Bob.SIZE * ppuY);
     }

 private void drawBlocks() {
      for (Block block : world.getBlocks()) {
       spriteBatch.draw(blockTexture, block.getPosition().x * ppuX, block.getPosition().y * ppuY, Block.SIZE * ppuX, Block.SIZE * ppuY);
      }
     }
现在,当尝试在android和桌面上运行该项目时,我在尝试加载内部文件block_01.png时收到了相同的错误

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: block.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:130)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:121)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
    at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
    at wiser.development.starAssault.view.WorldRenderer.loadTextures(WorldRenderer.java:58)
    at wiser.development.starAssault.view.WorldRenderer.<init>(WorldRenderer.java:53)
    at wiser.development.starAssault.screens.GameScreen.resize(GameScreen.java:27)
    at com.badlogic.gdx.Game.setScreen(Game.java:62)
    at wiser.development.starAssault.StarAssault.create(StarAssault.java:11)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
Caused by: java.io.IOException: couldn't load pixmap 8bit only
    at com.badlogic.gdx.graphics.g2d.Gdx2DPixmap.<init>(Gdx2DPixmap.java:57)
    at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:138)

忘记发布问题的答案了,这确实是特定的图像,显然有一些原因导致libgdx无法加载8位pixmap,如com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)的堆栈跟踪
中的这一行所示
原因:java.io.IOException:无法仅加载pixmap 8bit


。我不确定这不起作用的确切原因(对图像编解码器的理解不够深入)。然而,我在libgdx社区libgdx的freenodeirc频道上了解到了这个问题。由成员mobidevlop高度推荐使用此资源,该频道非常有用

是否可以像刷新Android项目那样简单,让桌面项目知道文件已经更新?在Eclipse中,每次我将新资产放入其
assets
目录中时,我通常必须单击android项目并点击F5刷新它,然后才能成功运行桌面项目。你的问题有点难理解,因为你提到它在一个名为
block_01.png
的文件上崩溃,而这个文件在你的代码中并不存在,而且它似乎实际上在堆栈跟踪中阻塞了
block.png
,但你说它阻塞了
bob_01.png
行。实际上,看起来您正在尝试加载一个16位png,出于某种原因,我认为libgdx只能加载8位、24位或32位。或者可能使用我认为不受支持的索引颜色。小更新:不确定它是否能工作:通常当我遇到此类错误时,我会在GIMP中打开图像,然后再次允许它对自身进行过度写入!。这将很容易加载图像。
 private void drawDebug() {
  // render blocks
  debugRenderer.setProjectionMatrix(cam.combined);
  debugRenderer.begin(ShapeType.Line);
  for (Block block : world.getBlocks()) {
   Rectangle rect = block.getBounds();
   float x1 = block.getPosition().x + rect.x;
   float y1 = block.getPosition().y + rect.y;
   debugRenderer.setColor(new Color(1, 0, 0, 1));
   debugRenderer.rect(x1, y1, rect.width, rect.height);
  }