【问题标题】:LibGDX tile map flickering when camera moving相机移动时LibGDX平铺地图闪烁
【发布时间】:2015-12-08 19:10:29
【问题描述】:

我正在尝试使用 libgdx 为我的家人制作一个圣诞节短游戏,并且当向前通过关卡时,屏幕边缘会闪烁,但向后移动时没有闪烁,这很烦人。

Here 是我的意思的演示。

另外,这是我的代码:

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);

任何帮助将不胜感激,谢谢。

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    我刚刚通过调用 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);
    

    【讨论】:

      【解决方案2】:

      我想到了两件事。

      1. 您的图块周围是否有至少 2 像素的填充?

      当 OpenGL 从图像中提取纹理时,它会将您正在使用的纹理区域周围的像素与纹理区域的边缘混合。烦人吧?但这是有原因的。我无法确定,但您的视频看起来像是出现了水平排水沟(底部以及房屋和地面之间的闪烁)。

      要解决此问题,您的图像资源上的每个图块需要在其周围至少有 2 个像素的填充。要创建填充,请在图像中的每个图块周围创建一个 2 像素宽的边框,然后将图块的边缘像素复制到这个 2 像素宽的边框中。

      1. 垂直同步

      如果您在尝试建议 1 后仍有问题,我在禁用 vsync 时遇到了一些与 libgdx 滚动有关的闪烁问题。您可以确保它在您的“启动器”类中启用:

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

      【讨论】:

      • 感谢您的快速回复,我会尽快回复。
      • 我在磁贴表中添加了填充,但屏幕边缘仍然闪烁,我不确定如何强制在 android 上启用 vSync。
      • 我找到了解决方法,但感谢您的帮助 :)
      • 已经有一段时间了,但也许您会看到:如何填充对角线?我现在正在填充我的精灵,对于顶部/左侧/右侧/底部,我只是复制该边缘上的像素。填补角落的理想方法是什么?
      猜你喜欢
      • 2014-10-23
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2016-07-08
      • 1970-01-01
      相关资源
      最近更新 更多