Box2D Light忽略所有的身体

时间:2013-11-24 17:37:59

标签: box2d libgdx

我的游戏中有一种需要穿透所有障碍物的光线,我怎样才能实现这一目标?

我试过了:

final short IGNORED = 0x001;

FixtureDef fd = new FixtureDef();
fd.filter.categoryBits = IGNORED;
fd.filter.groupIndex = IGNORED;
fd.filter.maskBits = IGNORED;

new PointLight(rayHandler, 1000, Color.CYAN, 1000, 200, 400);

PointLight.setContactFilter(IGNORED,IGNORED,IGNORED);

但是我仍然可以从那个光线中获得阴影。

另一件事是我的阴影是黑色的并且永远持续下去,有没有办法制造那么黑暗又长的阴影?

基本上这就是我得到的: enter image description here

但这就是我想要的: enter image description here

4 个答案:

答案 0 :(得分:2)

如果您只想让一切变得更亮,您可能想尝试使用环境光。例如:

rayHandler.setAmbientLight(0.5f);

使一切变得更亮50%,这可以达到你想要的效果。您还可以为此添加颜色(例如,实现日落氛围)。

答案 1 :(得分:1)

要“忽略所有实体”,您可以使用xRay参数而不需要过滤器,但在您的主题中,我会看到另一个问题。无论如何:

PointLight pointLight = new PointLight(...);
pointLight.setXray(true);

答案 2 :(得分:0)

我对libgdx并不熟悉,但是box2d允许你创建一个身体作为传感器。

从手册:

  

有时游戏逻辑需要知道两个灯具何时重叠   应该没有碰撞反应。这是通过使用传感器完成的。一个   传感器是检测碰撞但不产生碰撞的夹具   响应。

     

您可以将任何灯具标记为传感器。传感器可能是静态的或   动态。请记住,每个身体和你可能有多个固定装置   可以有任何传感器和固定装置的混合。

     

传感器不会生成接触点。有两种方法可以获得   传感器的状态:

     

b2Contact :: IsTouching b2ContactListener :: BeginContact和EndContact

因此,您应该能够使用您的联系人侦听器来检测它是否发生碰撞,但不会从物理系统中获得碰撞响应。

这有用吗?

答案 3 :(得分:0)

如果你想在游戏中使用to penetrate all obstacles,那么make them sensor true. 如果你想检查碰撞,那么你必须check collision in the BeginContact or end contact.

就像

一样
fd.isSensor = true;