簡體   English   中英

LibGDX 平鋪地圖在相機移動時閃爍

[英]LibGDX tile map flickering when camera moving

我正在嘗試使用 libgdx 為我的家人制作一個聖誕節小游戲,當前進通過關卡時,屏幕邊緣會閃爍,但是當向后時,沒有閃爍,這很煩人。

是我的意思的演示。

另外,這是我的代碼:

if (direction == "right") {
    body.setTransform(body.getPosition().x + 1 / PPM, body.getPosition().y, body.getAngle());
    b2dCam.position.x += (1 / PPM);
    camera.position.x += (1*(PPM/(8/2)));
} else if (direction == "left") {
    b2dCam.translate(-1 / PPM, 0);
    camera.translate(-1*(PPM/(8/2)), 0);
}

tmr.setView(camera);
tmr.render();
camera.update();
b2dCam.update();
b2dr.render(world, b2dCam.combined);

cntrlOverlay.act();
cntrlOverlay.draw();
world.step(1 / 60f, 6, 2);

任何幫助將不勝感激,謝謝。

我只是通過在其他所有事情之前調用 camera.update 來解決這個問題,而不是:

tmr.setView(camera);
tmr.render();
camera.update();
b2dCam.update();
b2dr.render(world, b2dCam.combined);

cntrlOverlay.act();
cntrlOverlay.draw();
world.step(1 / 60f, 6, 2);

我現在使用:

    camera.update();
    tmr.setView(camera);
    tmr.render();
    b2dCam.update();
    b2dr.render(world, b2dCam.combined);

    cntrlOverlay.act();
    cntrlOverlay.draw();
    world.step(1 / 60f, 6, 2);

想到兩件事。

  1. 您的磁貼周圍是否至少有 2px 的填充?

當 OpenGL 從圖像中提取紋理時,它會將您正在使用的紋理區域周圍的像素與紋理區域的邊緣混合。 煩人吧? 但這是有原因的。 我無法確定,但您的視頻看起來像是出現了水平排水溝(底部以及房屋與地面之間的閃爍)。

為了解決這個問題,圖像資產上的每個圖塊都需要至少有 2 個像素的填充周圍。 要創建填充,請在圖像中的每個圖塊周圍創建一個 2px 寬的邊框,然后將圖塊的邊緣像素復制到這個 2px 寬的邊框中。

  1. 垂直同步

如果您在嘗試建議 1 后仍有問題,那么當 vsync 被禁用時,我在 libgdx 滾動時遇到了一些閃爍的問題。 您可以通過以下方式確保在“啟動器”類中啟用它:

LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.vSyncEnabled = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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