Libgdx Box2D灯光,在Android设备上看起来有所不同,灯光的轮廓很奇怪

时间:2019-09-28 13:12:41

标签: java libgdx box2d light box2dlights

最近,我一直在尝试学习如何使用Box2D灯。我尝试将它们实现为我的简单游戏之一。一切正常,并且看起来不错(在PC上),直到我在手机上运行它为止。灯光看起来完全不同,我什至不知道如何描述它。除了良好且平滑的灯光效果外,我似乎在移动某种粘性。我注意到的另一件事是,当我尝试使用OBS进行录制时,它看起来与手机上的相同。我在兄弟的电话上尝试过,令我惊讶的是,它看起来完全像在我的计算机上。如果有人遇到过这种行为,或者可能知道它可能是由什么引起的,那么我什至不知道如何称呼它也将不胜感激。改变射线量似乎没有多大作用。我也尝试过在兄弟的电话上记录下来,但是它的行为与PC记录相同。

我的手机(小米mi mix 3)

我哥哥的电话(华为P10 lite)

手机上的外观如何: https://youtu.be/fq_J6A95D2Y

这是在PC上的外观屏幕,仍然可以看到“ OutLines”光,但更少: https://imgur.com/a/D6UHUVp

以下是与光有关的代码:


    `RayHandler.useDiffuseLight(true);
    rayHandler = new RayHandler(world);
    rayHandler.setAmbientLight(0.1f,0.1f,0.1f,0.2f);
    rayHandler.setCulling(true);`

没有useDiffuseLight的情况看起来更糟。 剔除似乎与我的问题没有任何关系。


    lightArray = new Array<>();
    int rays = 2048;
    int distance = 8;
    Color color = new Color(0.5f,0.5f,0.5f,1);
    PointLight light1 = new PointLight(context.getRayHandler(),rays,color,distance,3,3);
    PointLight light2 = new PointLight(context.getRayHandler(),rays,color,distance,3,13);
    PointLight light3 = new PointLight(context.getRayHandler(),rays,color,distance,6,3);
    PointLight light4 = new PointLight(context.getRayHandler(),rays,color,distance,6,13);
    lightArray.add(light1);
    lightArray.add(light2);
    lightArray.add(light3);
    lightArray.add(light4);
    for(Light light:lightArray){
        light.setSoftnessLength(1);
        light.setSoft(true);

    }

射线数量似乎没有改变与我的问题有关的任何东西。 (我已经尝试使用64,128,1024,4096和“输出行仍然看起来相同”)。关闭柔软度不会改变与我的问题有关的任何事情。


    playerLight = new PointLight(context.getRayHandler(),2048,new 
    Color(0.4f,0.4f,0.4f,1f),5,playerBody.getPosition().x,playerBody.getPosition().y);
    playerLight.attachToBody(playerBody);


    rayHandler.setCombinedMatrix(context.getCamera());
    rayHandler.updateAndRender();

在shapeRenderer和SpriteBatch绘制完所有内容后调用。

1 个答案:

答案 0 :(得分:0)

您所描述的被称为捆绑。由于某些原因,Android上的LibGDX默认帧缓冲区仅使用16位颜色。您可以在AndroidLauncher中将其更改为32位:

protected void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(){{
        r = 8;
        g = 8;
        b = 8;
        a = 8;
    }};
    initialize(new MyGdxGame(), config);
}

您还可以启用抖动以减少条纹,但是可能会降低性能。对于它的价值,我始终保持打开状态,并且我所有的内容都以60fps运行,因此我认为要花很多时间才能使其成为问题。

要启用抖动功能,请将其放入游戏的create()方法中:

Gdx.gl.glEnable(GL20.GL_DITHER);