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

时间:2016-01-24 17:28:24

标签: ios sprite-kit swift2

我正在使用 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;
}

默认情况下,场景中的所有对象都有一个collisionBitMask和categoryBitMask为“allCategory”。我的解决方案是暂时将其类别更改为nill。这绝对没有影响。我也想避免这种解决方案,因为1秒后玩家将不再与对象进行交互,这可能会导致错误(上面的代码仍会与之交互)。

关于如何在没有它在集市方向飞行的情况下拍摄新玩家的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

这将允许您避免像计时器这样的事情并不断检查更新循环。

在英语中,您说:当对象2不再触摸对象1时,对象2现在能够与对象1发生碰撞。

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