【问题标题】:Box2D Light to ignore all bodiesBox2D Light 忽略所有物体
【发布时间】:2014-09-19 21:03:27
【问题描述】:

我的游戏中有一种光线需要穿透所有障碍物,我该如何实现?

我试过这个:

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);

但我仍然会从那盏灯中得到阴影。

另一件事是我的阴影是黑色的并且永远持续存在,有没有办法创建不那么黑和长的阴影?

基本上这是我得到的:

但这就是我想要的:

【问题讨论】:

  • 听起来更像是图形问题,而不是 box2d 或物理问题

标签: box2d libgdx


【解决方案1】:

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

rayHandler.setAmbientLight(0.5f);

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

【讨论】:

  • 这是一个比第一个更好的答案。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    来自手册:

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

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

    传感器不会生成接触点。有两种获取方式 传感器状态:

    b2Contact::IsTouching b2ContactListener::BeginContact 和 EndContact

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

    这有帮助吗?

    【讨论】:

      【解决方案4】:

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

      就像

      fd.isSensor = true;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 2013-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 1970-01-01
        相关资源
        最近更新 更多