categoryBitMask碰撞情况

时间:2017-08-26 10:19:42

标签: swift sprite-kit

我目前正在玩家和地面之间使用collisionBitMask,它可以100%运行。我打开和关闭地面位掩码。

我使用此代码关闭地面遮挡

ground.physicsBody?.categoryBitMask = 0

我使用此代码打开接地掩码

ground.physicsBody?.categoryBitMask = kCategoryBitMaskGround

这100%工作!但是,如果当代码打开地面位掩码时播放器已经在地面内,它不会记录播放器和地面之间的碰撞,因此不会运行任何我放入"碰撞的代码#34 ;球员和地面之间的部分。玩家仍然会#34;互动"从物理方面来看,但没有发生碰撞。

我试图解决这个问题,但似乎是swift的限制......

任何人都可以想出解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:1)

这实际上取决于你如何定义物理实体。

我假设"地面"是一个矩形,你在它的周边创建了一个物理体。

像这样的东西

ground.physicsBody = SKPhysicsBody(edgeLoopFrom: CGRect(x: 0, y: 0, width: 100, height: 200))

如果这个(或类似的东西)就是你所做的,那么你所经历的行为是完全正常的,因为只有当玩家的物理体与地面的周边相交时才会发生物理碰撞。

请看以下3个场景。

没有联系

在下图中,玩家和地面的周长不相交。

enter image description here

联系

现在玩家确实与地面的周边相交。

enter image description here

没有联系

地面周边和玩家之间没有交叉点。

enter image description here