2014-12-13 4 views
1

Это от 6 дня Flappy птицы отдыха учебника - http://www.kilobolt.com/day-6-adding-graphics---welcome-to-the-necropolis.htmlПочему SpriteBatch ничего не рисует (LibGdx)?

Вот файл изображения я использую для текстуры в моей игре. Это 256px x 64px .png файл.

enter image description here

Вот класс, который я использовал для загрузки текстур и конкретный TextureRegion (часть из texure), что я хочу SpriteBatch рисовать.

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() 
      } 
     } 

enter image description here

Что я получаю, когда я бегу версию настольной игры черный экран, показанный выше (черный, потому что я установить фон на черный с этих строк кода

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 not rendering textures, потому что SpriteBatch должен перезаписать фон. И это не может быть LibGDX: Android SpriteBatch not drawing, потому что я работаю на рабочем столе, а не в andorid.

+0

Хорошо, позвольте мне дать вам несколько общих советов. Предлагаю вам прочитать «Изучение разработки игр LibGDX». Это хорошая книга для новичков, и она даст вам основные знания о libgdx. Если у вас нет денег, вы знаете, что делать, правильно? Вы также пытались загрузить исходный код из этого учебника? Может быть, вы что-то пропустили. И это мой исходный код https://github.com/nikoliazekter/JustSimpleTD. Это может помочь вам. – nikoliazekter

+0

где вы называете игруRenderer.render()? – grimrader22

+0

grimdradar22, я знаю, что это называется, потому что фон - черный фон, который я указал. – committedandroider

ответ

2

может быть, что вы должны сначала поместить 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); 

      } 
+0

Это была проблема :) Вы знаете, почему? Это та же камера – committedandroider

+0

@committedandroider, когда вы вызываете, строите камеру, затем вызываете setProjectionMatrix (cam.combined) ;, а затем переопределяете камеру, когда говорите: cam.setToOrtho (true, 136, gameHeight); назначьте матрицу, но после того, как это надежда изменится, к тому, что вы имеете в виду, и я хорошо объяснил –

0

Если кто-нибудь, имеющий подобный вопрос, как я решил эту проблему было назвать

 batch.setProjectionMatrix(cam.combined); 

после

cam.setToOrtho(true, 136, gameHeight); 

Что на самом деле не имеет смысла для меня, потому что это все тот же Matrix4 в Camera.java, то есть

public final Matrix4 combined = new Matrix4(); 

Хотел, чтобы кто-то еще мог это прояснить.

Смежные вопросы