我的游戏中有一种需要穿透所有障碍物的光线,我怎样才能实现这一目标?
我试过了:
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);
但是我仍然可以从那个光线中获得阴影。
另一件事是我的阴影是黑色的并且永远持续下去,有没有办法制造那么黑暗又长的阴影?
基本上这就是我得到的:
但这就是我想要的:
答案 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;