这是我第一次尝试创建一个使用黑色纹理,顶部有白色圆圈的基本灯光系统。我阅读了关于这个问题的各种线索,但我不知道我做错了什么。
我想要的是环境是黑暗的,而光线是白色的,但是如果我在绘制光线纹理时重置颜色,那么将spamabatch颜色更改为更暗的颜色会导致光更暗甚至
所以这就是我想要的(通过强制轻微纹理绘制5次,但这不是解决方案,这是一个黑客):
主要代码:
Game.sb.begin();
//Make stuff darker
Game.sb.setColor(0.1f, 0.1f, 0.1f,1f);
sb.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
lvl.render();
//Reset color
Game.sb.setColor(1f, 1f, 1f,1f);
sb.setBlendFunction(GL20.GL_DST_COLOR, GL20.GL_SRC_ALPHA);
//This draws all lights by drawing a texture with the above blending function
lightM.render();
Game.sb.end();
光对象绘制方法:
Game.sb.setColor(c.r,c.b,c.g, 1f);
Utils.drawTexture(Assets.get("sprites/lightcircle2.png", Texture.class), pos, size, true);
Game.sb.setColor(1,1,1,1);
我是否在设置颜色时犯了一些错误?我一直在考虑使用FrameBuffer,但我不确定它是否会给我我想要的光效
顺便说一下,这是我的质地(它的CC0):
答案 0 :(得分:1)
您可以通过以下方式达到您的要求:
通过使用FBO和混合,Here是我对此主题的回答之一。
您可以使用box2dlight,即使不使用box2dbody(如果您不想要任何阴影)
World world = new World(new Vector2(0,0),false);
RayHandler rayHandler = new RayHandler(world);
rayHandler.setCombinedMatrix(stage.getCamera().combined); //<-- pass your camera combined matrix
new PointLight(rayHandler,1000, Color.WHITE,radius,x_position,y_position);
在您使用rayHandler.updateAndRender();
方法完成所有渲染后,最后致电render()
。