在接触/碰撞时改变恢复原状不会立即生效

时间:2017-03-28 09:21:30

标签: swift3 sprite-kit

我有一个物体与另外两个物体发生碰撞。我根据相关的碰撞对象更改恢复原状。每当恢复原状从0.5变为0时,不会立即识别,当恢复原状被假定为零时,这会导致短暂的弹性。如何立即识别/影响更改?请参阅下面的代码:

    func didBegin(_ contact: SKPhysicsContact) {
    var firstBody : SKPhysicsBody
    var secondBody : SKPhysicsBody

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask  {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    }
    else    {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }



    if firstBody.categoryBitMask == spriteCategory && secondBody.categoryBitMask == enemyCategory1  {

        var spriteContactNode = firstBody.node
        spriteContactNode?.physicsBody?.restitution = 0.5
        self.physicsWorld.gravity = CGVector(dx: 0, dy: -2.0)
    }

    if firstBody.categoryBitMask == spriteCategory && secondBody.categoryBitMask == enemyCategory2  {

        var spriteContactNode = firstBody.node
        spriteContactNode?.physicsBody?.restitution = 0
        self.physicsWorld.gravity = CGVector(dx: 0, dy: -0.5)

    }
}

1 个答案:

答案 0 :(得分:0)

我不相信你想要做的事情会起作用。恢复会影响一段时间,就好像节点有一个重复几次的动作。

尝试将节点isDynamic属性更改为false。

var spriteContactNode = firstBody.node
spriteContactNode?.physicsBody?.isDynamic = false
spriteContactNode?.physicsBody?.restitution = 0
self.physicsWorld.gravity = CGVector(dx: 0, dy: -0.5)
spriteContactNode?.physicsBody?.isDynamic = true

然后将其重新设置为true可能足以让在弹力下降之前只弹跳一次。