Jadi ini cukup aneh... Saya memiliki BaseScreen abstrak. Layar ini menginisialisasi SpriteBatch on show(). Init() memanggil salah satu metode abstrak BaseScreen. Masalah undian ini berasal dari penggunaan viewport 'gameView' yang merupakan ExtendViewport

SpriteBatch batch;
@Override
public void show(){
    batch = new SpriteBatch();
    gameView = new ExtendViewport(SV.V_WIDTH, SV.V_HEIGHT);
    hudView = new ScreenViewport();
    init();
}

Inilah yang saya lakukan dalam fungsi render:

@Override
public void render(float delta){
    /* 
        Just in case render is being called more than usual 60 times, 
        I want to call update only 60 times per second. (SV.STEP = 1/60f)
     */
    accum += delta;
    while(accum >= SV.STEP){
        accum -= SV.STEP;
        update();
    }

    /* Clear Screen */
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT);

    /* DRAW WORLD */
    batch.setProjectionMatrix(gameView.getCamera().combined);
    gameView.apply(true);
    batch.begin();
    draw(batch, SV.BatchType.World);
    batch.end();

    /* DRAW UI
    batch.setProjectionMatrix(hudView.getCamera().combined);
    hudView.apply(true);
    batch.begin();
    draw(batch, SV.BatchType.UI);
    batch.end();*/
}

Saya memiliki dua viewports, satu untuk dunia game dan satu untuk hud. Saya menggunakannya untuk mengatur matriks proyeksi batch.

Perintah draw(batch, SV.BatchType.World) akhirnya membawa kode ke sini:

private void drawBody(Batch batch){
    Vector2 position = body.getPosition();
    //Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
    batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
    font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
}

Sekarang potongan kode ini menggambar ini: 2 Undian1 Draw

Akan menggambar

3 consecutive fonts

Dan ini

private void drawBody(Batch batch){
    Vector2 position = body.getPosition();
    //Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
    batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
    font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
    font.draw(batch, "THIS IS A TEST!", position.x, position.y + 100);
    font.draw(batch, "THIS IS A WOOOOOOOOO!", position.x, position.y - 100);
    batch.draw(heart, position.x,position.y, h_width*2, h_height*2);
    batch.draw(heart, position.x,position.y+ 100, h_width*2, h_height*2);
}

Akan menggambar

2 batch draw at end

Berikut adalah contoh dengan 6 seri, tetapi Anda harus memiliki .draw terakhir 'sekali pakai'

private void drawBody(Batch batch){
    Vector2 position = body.getPosition();
    //Gdx.app.log(TAG, heart.getWidth() + ", " + heart.getHeight());
    batch.draw(heart, position.x-100,position.y-50, h_width*2, h_height*2);
    font.draw(batch, "THIS IS A WOOOOOOOOO!", 100, 100);
    font.draw(batch, "THIS IS A TEST!", position.x, position.y + 100);
    batch.draw(heart, position.x,position.y, h_width*2, h_height*2);
    batch.draw(heart, position.x,position.y+ 100, h_width*2, h_height*2);
    font.draw(batch, "THIS IS A WOOOOOOOOO!", position.x, position.y - 100);
    batch.draw(heart, 10,10, h_width*2, h_height*2);
}

6 draws

Inilah satu hal terakhir ... undian batch terakhir ... jika Anda mencoba menggambar pada 0, 0 -> ini terjadi posisi 0 0 draw libgdx

1
ifnDef 11 November 2017, 05:16

1 menjawab

Jawaban Terbaik

Jadi saya mempersempit apa penyebabnya: sepertinya kumpulan itu tidak akan disadap ketika Anda

1) Membuat instance batch pada kelas BASE 2) memanggil batch.start pada metode render kelas BASE 3) memanggil salah satu metode abstrak di kelas BASE setelah batch.start 4) Batch akan disadap.

Apa yang saya lakukan untuk mengatasi masalah ini adalah memindahkan kode batch ke kelas turunan, dan semuanya berfungsi dengan baik.

Saya masih terbuka untuk jawaban mengapa bug ini terjadi.

1
ifnDef 11 November 2017, 03:51