我正在使用 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秒后玩家将不再与对象进行交互,这可能会导致错误(上面的代码仍会与之交互)。
关于如何在没有它在集市方向飞行的情况下拍摄新玩家的任何想法?谢谢!
答案 0 :(得分:1)
默认关闭object2碰撞。 (使用collisionBitMask = 0执行此操作)
使用object1的标志启用对象contactBitMask。
在didEndContact方法中,当object1接触object2的条件满足时,启用object1的碰撞object2。
这将允许您避免像计时器这样的事情并不断检查更新循环。
在英语中,您说:当对象2不再触摸对象1时,对象2现在能够与对象1发生碰撞。
根据具体情况,您可能希望在启用碰撞后删除接触测试