[英]Why doesn't SpriteBatch draw anything (LibGdx)?
這是從笨鳥先飛娛樂教程的第6天- http://www.kilobolt.com/day-6-adding-graphics---welcome-to-the-necropolis.html
這是我在游戲中用於紋理的圖像文件。 這是一個256px x 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和游戲高度之間。
我也檢查了其他線程。 我的問題不能是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.