Java / box2DLights - 错误的灯光位置

时间:2015-10-22 12:43:47

标签: java libgdx box2d light box2dlights

我使用Libgdx作为项目,更确切地说是Box2DLights。

我的问题如下:当我想要一个新的" PointLight"它总是在屏幕的中心。如果我改变坐标,它就不起作用。

在我的" show()"方法:

    Box2D.init();
    world = new World(new Vector2(0, 0), true);

    rh = new RayHandler(world);
    rh.setAmbientLight(1.2f, 0.2f, 0.2f, 0.1f);
    pl = new PointLight(rh, 100, new Color(1,1,1,1),(float) 0.5,0,0);

在我的" render()"方法:

    Gdx.gl.glClearColor(0f, 0f, 0f, 1f); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    world.step(delta, 8, 3);

    renderer.begin(ShapeType.Filled);
    for (SolarSystem ss : solarSystemList)
    {
        if(ss.getColor() <= 15) colorSS = Color.YELLOW;
        else if(ss.getColor() > 15 && ss.getColor() < 31) colorSS = Color.ORANGE;
        else if(ss.getColor() > 30 && ss.getColor() < 46) colorSS = Color.RED;
        else if(ss.getColor() > 45) colorSS = Color.CYAN;

        renderer.setColor(colorSS);
        renderer.circle(ss.getMapX(), ss.getMapY(), ss.getSize() - 3);
    }
    renderer.end();

    rh.updateAndRender();

结果:

enter image description here 现在,如果我尝试更改坐标:

pl = new PointLight(rh, 100, new Color(1,1,1,1),(float) 0.5, 50, 50);

enter image description here

......不再光了

你知道如何将光线放在我想要的地方吗?

编辑:我的屏幕尺寸:宽度 - 860px /高度 - 645px

2 个答案:

答案 0 :(得分:1)

如果(1,1)是右上角而(0,0)是左下角而(0.5,0.5)是屏幕的中间,那么我建议这样做: 插入所需的值并将其除以屏幕的宽度和高度,例如

 ( xPosition/Gdx.graphics.width, yPosition/Gdx.graphics.height ) 

更新:

抱歉,我没有看到(0,0)是中心,所以我建议你改用它:

width  = Gdx.graphics.width;
height = Gdx.graphics.height;
((xPosition - width/2)/ width/2 , (yPosition - height/2)/ height/2)

更新2: 我认为你做的小算术错误假设你的

你说

宽度= 860,高度= 645

这是等式:

x =((xPosition - width / 2)/ width / 2)

y =(yPosition - height / 2)/ height / 2)

x =(50 - 860/2)/(860/2)

y =(50 - 645/2)/(645/2)

x =(50 - 430)/(430)

y =(50 - 322.5)/(322.5)

x =(50-430)/(430)=( - 380)/(430)

y =(50 - 322.5)/(322.5)=( - -272.5)/(322.5)

x = -0.88

y = -0.84

更接近(-1,-1)又名:左下角

希望它有用:)

答案 1 :(得分:0)

如果距离为0.5并且你的光照在屏幕的一半以上,我只是假设50, 50的位置不适合此屏幕。只是尝试将您的位置更改为较小的值。 Maybe your coordinates do not represent pixels but other units as it is recommended for box2d

编辑:由于我不知道您的整个libgdx应用,我建议您深入了解CameraViewPort等。例如,box2dlights RayHandler可以通过setCombinedMatrix获取相机。您可能还希望将灯光与主体和box2d世界与精灵同步。