Libgdx光没有box2d

Spr*_*bua 7 java lighting box2d libgdx box2dlights

我刚开始使用libgdx创建游戏.这是一个使用scene2d ui的自上而下的2D射击游戏.现在我想,我可以在一定程度上添加黑暗和光明,但我不想用box2d重写所有内容.我不需要真实的阴影只是某种环境光和我的角色周围的光环,它不受墙壁和其他障碍物的影响.所以我想知道libgdx中是否有任何一种灯光系统?或者我可以使用box2dlights而不使用box2d body/world ......?谢谢

Ked*_*edu 25

在我看来,明确的答案是错误的.

如果你不想要任何阴影,它实际上非常简单地使用box2dLights而不使用box2d.问题是,如果可以在角色周围添加某种圆形光.

我使用了两种不同的方法,只使用了box2dlights.

标记答案中的文章描述了使用FBO的方法.如果你只是想减轻一个区域,你真的不需要它.你只需要一个精灵,就像这样.现在将它放在屏幕上的某个位置,在渲染时,执行以下操作:

batch.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
theLightSprite.draw(batch, parentAlpha);
batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

首先,混合函数已更改,因此我们不仅渲染精灵,而是在背景上以照明方式混合它.绘制后,将混合函数重置为正常,因此在此之后的所有其他内容将再次正常渲染.而已.

第二种方法使用box2dlights.是的,我们确实需要一个box2d世界对象,但我们不需要用它做任何事情.所以我们做的是:

world = new World(new Vector2(0,0),false);
rayHandler = new RayHandler(world);
rayHandler.setCombinedMatrix(stage.getCamera().combined);
new PointLight(rayHandler,1000, Color.BLUE,radius,x_position,y_position);
Run Code Online (Sandbox Code Playgroud)

首先,我们创造了我们的世界,那就是什么都不做.我们只需要第二个语句,我们创建我们的RayHandler来计算我们的灯光.在第三个语句中,我们设置了rayHandler的矩阵.在这种情况下,我使用scene2d,因此使用阶段相机组合矩阵.如果您使用其他相机,请在此处使用其组合矩阵.最后一个语句使用rayHandler创建一个pointlight,并描述光线的数量,灯光颜色,半径和位置.

我们现在要做的就是在render()方法和调用中绘制我们的阶段或sprite

rayHandler.updateAndRender();
Run Code Online (Sandbox Code Playgroud)

之后在render方法中.满容易.


noo*_*one 8

不幸的是,LibGDX已经提供了类似的功能.

但如果你不想要阴影,你可以轻松自己做.

是一个通过LibGDX完成它的人的视频.以下是此视频的文章,其中包含代码和说明以及所提供的所有内容.您可以使用着色器以这种方式执行此操作,但您也可以通过将光照贴图渲染到FBO(在给定的链接中可以看到如何执行此操作)来执行相同的操作,然后只需在顶部激活混合的情况下渲染它你的屏幕.标准SpriteBatch可以做到这一点,您不需要任何自定义着色器.

如果你仍然希望有障碍物的真实阴影,你可能会发现这篇文章非常有用.但这要慢很多,需要特殊的着色器.

如果没有Box2D顺便说一句,也无法使用Box2dLights.