Java 为什么';t SpriteBatch绘制任何内容(LibGdx)?

Java 为什么';t SpriteBatch绘制任何内容(LibGdx)?,java,android,libgdx,sprite,spritebatch,Java,Android,Libgdx,Sprite,Spritebatch,这是flappy bird娱乐教程的第6天 - 这是我在游戏中使用的纹理图像文件。它是一个256px 64px.png文件 下面是我用来加载纹理的类和我希望SpriteBatch绘制的特定TextureRegion(纹理的一部分) public class AssetLoader { public static Texture texture; public static TextureRegion bg; public s

这是flappy bird娱乐教程的第6天 -

这是我在游戏中使用的纹理图像文件。它是一个256px 64px.png文件

下面是我用来加载纹理的类和我希望SpriteBatch绘制的特定TextureRegion(纹理的一部分)

    public class AssetLoader {
          public static Texture texture;
          public static TextureRegion bg;

          public static void load() {
                  texture = new Texture(Gdx.files.internal("data/texture.png"));
                  bg = new TextureRegion(texture, 0, 0, 136, 43);
          }

   }
      And I call AssertLoader.load(), along with setting up game screen from
     public class MyGdxGame extends Game{
          @Override
         public void create() {
                  AssetLoader.load();
                 setScreen(new GameScreen());
         }
      }

      And inside GameScreen.java
      public class GameScreen implements Screen {
           //delegate render task
           private GameRenderer renderer;
          public GameScreen() {
               float screenHeight = Gdx.graphics.getHeight();
               float screenWidth = Gdx.graphics.getWidth();
               float gameWidth = 136;
               float gameHeight = screenHeight / (screenWidth / gameWidth);
               renderer = new GameRenderer((int)gameHeight);
           }
       }
      And inside GameRederer, the class I delegate to render the game
      public class GameRenderer {
            private int gameHeight;
            private SpriteBatch batch;
            private OrthographicCamera cam;
            public GameRenderer(int gameHeight) {
                   this.gameHeight = gameHeight;
                  cam = new OrthographicCamera();
                   batch = new SpriteBatch();
                   batch.setProjectionMatrix(cam.combined);
                    cam.setToOrtho(true, 136, gameHeight);
            }
             public void render() {
                  Gdx.gl.glClearColor(0, 0, 0, 1);
                  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
                  batch.begin();
                  batch.disableBlending();
                  batch.draw(AssetLoader.bg, 0, (gameHeight/2) + 23, 136, 43);
                  batch.end()
             }
        }

当我运行桌面版的游戏时,我得到的是上面显示的黑色屏幕(黑色是因为我用这些代码行将背景设置为黑色)

  Gdx.gl.glClearColor(0, 0, 0, 1);
  Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
有人知道为什么SpritchBatch图形没有显示吗?我用这行代码提取了我想要的纹理部分(从0,0开始,宽度136,高度43)-使用GIMP-找到要剪切的部分

  bg = new TextureRegion(texture, 0, 0, 136, 43);
我还放了一些日志语句(从视图中删除了它们),以确保在绘制之前,bg的宽度和高度设置正确。问题不可能是游戏高度,因为我使用了打印语句,发现它是204,这意味着这个表达式(gameHeight/2)+23将计算为125,介于0和游戏高度之间

我也检查了其他线程。 我的问题不可能是因为SpriteBatch应该覆盖背景。
这不可能是因为我在桌面上运行我的,而不是android。

如果有人有类似的问题,我解决问题的方法就是打电话

        batch.setProjectionMatrix(cam.combined);
之后

   cam.setToOrtho(true, 136, gameHeight);
这对我来说没什么意义,因为它仍然是Camera.java中的Matrix4

    public final Matrix4 combined = new Matrix4();

希望其他人能澄清这一点。

可能是您必须先将
cam.setToorTo(true,136,gameHeight);
放在批处理之前,因此我无法确认是否有帮助

 public GameRenderer(int gameHeight) {
                   this.gameHeight = gameHeight;
                  cam = new OrthographicCamera();
                   batch = new SpriteBatch();
                   cam.setToOrtho(true, 136, gameHeight);
                   batch.setProjectionMatrix(cam.combined);

            }

好的,让我给你一些一般性的建议。我建议你阅读“学习libGDX游戏开发”。这是一本适合初学者的好书,它将为您提供有关libgdx的基本知识。如果您没有钱,您知道该做什么,对吗?您也尝试过从该教程下载源代码吗?可能您错过了什么。这是我的源代码。它可以帮助您。您在哪里调用gameRenderer.render()?grimdradar22,我知道之所以调用它,是因为背景是我指定的黑色背景。nikoliazekter,我认为本教程系列对初学者来说非常好。但是,是的,我下载了源代码。我仍在试图找到discrepancyNote,即本教程适用于比当前版本旧的libgdx。你必须这就是问题所在:)你知道为什么吗?都一样camera@committedandroider当您调用时,builder camera,然后调用setProjectionMatrix(cam.combined);,然后当你说cam.setToOrtho(true,136,gameHeight)时重新定义相机;分配一个矩阵,但在改变后,希望它是,你的意思,我解释得很好