簡體   English   中英

libGDX - 通過SpriteBatch結果翻轉繪制紋理

[英]libGDX - Drawing Texture via SpriteBatch Result Flip

當我嘗試使用SpriteBatch繪制Texture時,結果翻轉如下:

使用SpriteBatch結果Flip繪制紋理

在這里我做的是:我創建了繪制邊界矩形和圖像的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();
}
}

參數ShapeRendererSpriteBatch通過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.

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