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方法中.满容易.
| 归档时间: |
|
| 查看次数: |
10992 次 |
| 最近记录: |