[英]libGDX - Drawing Texture via SpriteBatch Result Flip
當我嘗試使用SpriteBatch
繪制Texture
時,結果翻轉如下:
在這里我做的是:我創建了繪制邊界矩形和圖像的MyRect
對象。
這里是MyRect
類預覽:
public class MyRect {
private Vector2 position;
private int width;
private float height;
private Texture img;
private Sprite sprite;
public MyRect(int x, int y, int width, int height){
img = new Texture("badlogic.jpg");
sprite = new Sprite(img);
position = new Vector2(x,y);
this.width = width;
this.height = height;
}
public void draw(ShapeRenderer shapeRenderer, SpriteBatch batch){
// Gdx.gl.glClearColor(0, 0, 0, 1);
// Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.begin(ShapeType.Line);
// Draw Background color
shapeRenderer.setColor(55 / 255.0f, 80 / 255.0f, 100 / 255.0f, 1);
shapeRenderer.rect(position.x, position.y, width, height);
shapeRenderer.end();
batch.begin();
// batch.disableBlending();
batch.draw(img, position.x, position.y,
width, height);
batch.end();
}
}
參數ShapeRenderer
和SpriteBatch
通過GameScreen
類傳遞。
GameScreen
預覽:
public class GameScreen implements Screen{
private MyRect myRect;
private ShapeRenderer shapeRenderer;
private SpriteBatch batch;
private OrthographicCamera cam;
public GameScreen(){
myRect = new MyRect(10,10,50,50);
int gameHeight=100;
cam = new OrthographicCamera();
cam.setToOrtho(true, 136, gameHeight);
batch = new SpriteBatch();
batch.setProjectionMatrix(cam.combined);
shapeRenderer = new ShapeRenderer();
shapeRenderer.setProjectionMatrix(cam.combined);
}
@Override
public void render(float delta) {
// TODO Auto-generated method stub
myRect.draw(shapeRenderer, batch);
}
}
為什么會這樣? 我做錯了嗎?
你的相機是顛倒的,因為你在它上面調用setToOrtho(true, ...)
而不是setToOrtho(false, ...)
使用顛倒的相機是有效的(如果您之前使用過Flash或其他Y-down系統可能會更舒服),但是您需要翻轉所有的TextureRegions(也就是Sprite): sprite.flip(false, true)
。 或者,您可以使用TexturePacker創建TextureAtlas(在libgdx文檔中查找)並設置flipY選項,以便它提前翻轉它們。 最終,為了性能,您還需要使用TextureAtlas。
順便說一句,當你開始繪制MyRect的多個實例時,你將需要將spriteBatch.begin()
和end()
以及shapeRenderer.begin()
和end()
移出單獨的MyRect繪制方法,否則你將需要遇到性能問題。 因此,需要有兩種繪制方法(一種用於精靈批處理,一種用於形狀渲染器)。
顯然,我唯一看到的不同之處就是嘗試改變:這個meybe如果它可以“用於測試”
cam.setToOrtho(false, 136, gameHeight);
這就是我使用相機的方式。
我不知道是否使用true,你必須做一些不同的方式來繪制批量,無論如何。 如果相機假,它看起來不錯,我認為它必須翻轉圖像才能畫出紫外線
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.