Box2D:在忽略来自特定身体的力量的情况下继续模拟身体

时间:2016-09-19 23:04:00

标签: swift box2d collision-detection

我在世界上有两具尸体。首先是玩家四处走动。 而第二个,敌人试图击中玩家。我想为玩家实施一个盾牌,所以当敌人接触到玩家时它不会影响玩家的线速度,而是继续移动。

我尝试添加第三个身体作为运动学绑定到播放器(让它比播放器稍大)但是由于某种原因,当线性冲动应用于播放器时它会粘在墙上。

所以我试图强制停止玩家并将玩家的倒置线速度应用于敌人。当我的玩家稳定而不动时,这种方法很好。

我怎样才能让它成为一个像运动一样的身体,具有动态的所有特征,但不会受到敌人击中的影响。

这是我尝试在播放器稳定时工作正常的代码,因为iam在击中后使线性速度归零,但这不是一个干净的解决方案。

我真的可以使用运动物体并对它们使用applyLinearImpulse吗?我在运动体上看到的问题是,我的玩家只会忽略墙壁,但是它仍然会与墙壁发生碰撞,并且在世界范围内的其他地方除外,这些敌人应该像玩家一样撞到墙上而反弹。

func postSolve(contact: b2Contact, impulse: b2ContactImpulse) {
  ...
  if player.ShieldActive {
    let playervelocity = player.getLinearVelocity()
    player.forceStop // sets linearvelocity to zero including angularvelocity
    enemy.applyLinearImpulse( playervelocity.invert()*0.1) // apply the inverted velocity of the player with a scalar so the enemy moves aways like it hit a wall
  }
  ...
}

1 个答案:

答案 0 :(得分:0)

将单独的身体添加为我的播放器大小的运动学,并设置正确的类别和掩码使得它成为可能。我能够自由移动,当盾牌活跃时,敌人不再伤害我的玩家。