Libgdx Box2D灯,在android设备上看起来不同,灯的轮廓很奇怪

问题描述 投票:0回答:1

最近,我一直在尝试学习如何使用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绘制完所有内容后调用。

java libgdx box2d light box2dlights
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.