Box2D检测碰撞而不会导致某些对象之间发生碰撞

时间:2014-05-23 02:04:26

标签: box2d

我正在使用box2d和libgdx开发游戏。我有一个角色,是一个从墙壁上反弹的球。有些敌人会杀死玩家 - 他们也会从墙壁上反弹。我试图建立一个无敌的力量,这样当玩家无敌时,玩家应该掠过敌人(而不是从他们身上发生碰撞),然后摧毁他们。这意味着我需要被告知玩家和敌人之间的碰撞(为了摧毁敌人),但不应该发生碰撞(玩家不应该从敌人身上反弹)。我的问题是:实现这个目标的最佳方式是什么?

我认为传感器无法工作,因为玩家和敌人仍然需要与墙壁发生碰撞,因此任何一个传感器都无法解决问题。我不认为碰撞位掩码会起作用,因为当玩家和敌人发生碰撞时我仍需要产生碰撞事件。

由于

2 个答案:

答案 0 :(得分:2)

传感器可以为您服务。 您可以为您的播放器而不是一个创建两个灯具。

  • 为玩家创造一个与墙壁碰撞的装置(而不是敌人)
  • 为玩家创造另一个与敌人(而不是墙壁)发生碰撞的装置

然后,当无敌加电活动时,你只需将与敌人碰撞的固定装置设置为传感器。

答案 1 :(得分:0)

像丹尼斯所说,你可以用传感器轻松完成。你的身体不会在身体上与其他身体发生碰撞,但会记录下来。 您甚至可以使用过滤器指定它们是否在同一个碰撞类别/组中,以更具体地说明哪些实体相互碰撞。

FixtureDef myFixtureDef = new FixtureDef();
CircleShape myCircle = new CircleShape();
myCircle.setRadius(myRadius);
myFixtureDef.shape = myCircle;
myFixtureDef.isSensor = true;
myFixtureDef.filter.categoryBits = = 0x0002; // 0000000000000010 in binary
myFixtureDef.filter.maskBits = 0x0001; // 0000000000000001 in binary
myBody.createFixture(myFixtureDef);

在此示例中,您的正文属于0x0002类别/组,并且只会与匹配0x0001类别/组的正文冲突。

相关问题