簡體   English   中英

為什么SpriteBatch不繪制任何內容(LibGdx)?

[英]Why doesn't SpriteBatch draw anything (LibGdx)?

這是從笨鳥先飛娛樂教程的第6天- http://www.kilobolt.com/day-6-adding-graphics---welcome-to-the-necropolis.html

這是我在游戲中用於紋理的圖像文件。 這是一個256px x 64px .p​​ng文件。

在此處輸入圖片說明

這是我用於加載紋理的類以及希望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和游戲高度之間。

我也檢查了其他線程。 我的問題不能是libgdx spritebatch不渲染紋理,因為SpriteBatch應該覆蓋背景。 它不能是LibGDX:Android SpriteBatch無法繪制,因為我在桌面上而不是Andorid上運行我的。

可能是您必須先放置cam.setToOrtho(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);

            }

如果有人遇到類似問題,我解決問題的方法是致電

        batch.setProjectionMatrix(cam.combined);

   cam.setToOrtho(true, 136, gameHeight);

這對我來說真的沒有意義,因為在Camera.java中它仍然是相同的Matrix4,即

    public final Matrix4 combined = new Matrix4();

希望其他人可以澄清這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM