我使用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();
结果:
pl = new PointLight(rh, 100, new Color(1,1,1,1),(float) 0.5, 50, 50);
......不再光了
你知道如何将光线放在我想要的地方吗?
编辑:我的屏幕尺寸:宽度 - 860px /高度 - 645px
答案 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应用,我建议您深入了解Camera
,ViewPort
等。例如,box2dlights RayHandler
可以通过setCombinedMatrix
获取相机。您可能还希望将灯光与主体和box2d世界与精灵同步。