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

Swift3 在接触/碰撞时更改恢复原状不会立即生效,swift3,sprite-kit,Swift3,Sprite Kit,我有一个物体与另外两个物体碰撞。我根据所讨论的碰撞对象更改恢复。无论何时恢复从0.5更改为0,它都不会立即被识别,这会在恢复假定为零时导致短时间的反弹。我如何使更改立即可识别/生效?请参阅下面我的代码: func didBegin(_ contact: SKPhysicsContact) { var firstBody : SKPhysicsBody var secondBody : SKPhysicsBody if contact.bodyA.category

我有一个物体与另外两个物体碰撞。我根据所讨论的碰撞对象更改恢复。无论何时恢复从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)

    }
}
func didbeagin(uu联系人:skphysiccontact){
var firstBody:SKPhysicsBody
var第二个主体:SKPhysicsBody
如果contact.bodyA.categoryBitMask
我不相信你想做的会奏效。恢复会影响一段时间,就像节点的某个操作重复了几次一样

尝试将nodes
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
然后把它设回真值可能就足够让它在重力作用下坠落之前只反弹一次