Libgdx光没有box2d

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

不幸的是,LibGDX已经提供了类似的function。

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

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

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

如果没有Box2D btw,也无法使用Box2dLights。

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

如果你不想要任何阴影,使用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); 

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

第二种方法使用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); 

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

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

 rayHandler.updateAndRender(); 

之后在render方法中。 挺容易。

Interesting Posts