【问题标题】:Changing restitution on contact/collision not effected immediately在接触/碰撞时更改恢复原状不会立即生效
【发布时间】:2017-03-28 09:21:30
【问题描述】:

我有一个对象与另外两个对象发生碰撞。我根据有问题的碰撞对象更改恢复原状。每当恢复从 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)

    }
}

【问题讨论】:

    标签: swift3 sprite-kit


    【解决方案1】:

    我不相信您尝试做的事情会奏效。恢复原状会影响一段时间,就像节点有重复几次的动作一样。

    尝试将节点 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 可能足以让在重力下落之前只反弹一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多