暂时停用两个节点之间的物理碰撞(Swift 2,IOS)

Temporarily deactivate physical collision between two Nodes(Swift 2, IOS)

我正在使用 SpriteKit,我无法让我的一个物体射出另一个物体,而不会在它射出它的那一刻与它发生碰撞。然而,一旦他们不再处于相互接触的范围内,我希望他们能够在游戏的剩余部分中相互接触。

这是我试过的-

    var allCategory: UInt32  = 1;
    var nillCategory: UInt32  = 2;
    var bufferNode: SKNode?

    bufferNode = self.childNodeWithName("player")
    bufferNode!.physicsBody!.collisionBitMask = nillCategory;
    bufferNode!.physicsBody!.categoryBitMask = nillCategory;
    shootNewPlayer(touchLocation)
    runAction(SKAction.sequence([SKAction.waitForDuration(1),SKAction.runBlock(removeBuffer)]))
}
func removeBuffer(){
    bufferNode!.physicsBody!.collisionBitMask = allCategory;
    bufferNode!.physicsBody!.categoryBitMask = allCategory;
}

默认情况下,我在场景中的所有对象都有 "allCategory." 的 collisionBitMask 和 categoryBitMask 我的解决方案是暂时将其类别更改为 nill。这完全没有影响。我也想避免这个解决方案,因为 1 秒钟玩家将不再与对象交互,这可能会导致错误(使用上面的代码它仍然交互)。

关于如何让物体射击新玩家而不让它飞向集市方向,有什么想法吗?谢谢!

默认关闭object2 碰撞。 (使用 collisionBitMask = 0 执行此操作)

使用对象 1 的标志启用对象 contactBitMask。

在didEndContact方法中,当object1接触object2的条件满足时,为object1启用碰撞object2。

这将允许您避免诸如计时器和不断检查更新循环之类的事情。

用英语来说,你是说:当物体 2 不再接触物体 1 时,物体 2 现在可以与物体 1 发生碰撞。

根据情况,您可能希望在启用碰撞后删除接触测试