在didBeginContact之后,SKSpriteNode不会定位

时间:2015-09-30 04:41:00

标签: swift sprite-kit

我正在使用SpriteKit和Swift进行碰撞检测。我有一个响应与didBeginContact函数碰撞的SKScene:

func didBeginContact(contact: SKPhysicsContact) {        
    if (contact.bodyA.categoryBitMask == ColliderType.Food && contact.bodyB.categoryBitMask == ColliderType.Head) {
        placeFoodInRandomGridLocation()
    }
}
func placeFoodInRandomGridLocation() {
    let randomX = arc4random_uniform(UInt32(myGrid.columnCount))
    let randomY = arc4random_uniform(UInt32(myGrid.rowCount))
    foodSpriteHolder.position = CGPoint(x: colLines[Int(randomX)], y: rowLines[Int(randomY)])
}

问题是我可以在此didBeginContact函数触发之前轻松调整foodSpriteHolder的位置。当调用placeFoodInRandomGridLocation时,它根本不会移动foodSpriteHolder。

这似乎是范围问题。我只是不确定如何理清这个职位不会更新的原因。我甚至可以在这个流中隐藏foodSpriteHolder可见性......所以,我知道我可以访问它。

这里的参考是如何为foodSpriteHolder中的Food类项设置物理体:

    self.physicsBody = SKPhysicsBody(rectangleOfSize: self.size, center: CGPointMake(reducedSize/2, reducedSize/2))
    self.physicsBody?.affectedByGravity = false
    self.physicsBody?.categoryBitMask = ColliderType.Food

最后,placeFoodInRandomGridLocation函数肯定被调用...位置不会更新。

感谢您的任何想法, 约什

1 个答案:

答案 0 :(得分:0)

这种情况下的答案是在检测到碰撞时删除节点:

contact.bodyA.node?.removeFromParent()

现在我可以在新位置创建一个新节点。由于affectedByGravity设置为false,因此节点不会更新其位置。