为什么我的节点在不在Scene中时调用didBeginContact方法

时间:2015-12-09 20:16:30

标签: swift sprite-kit

func didBeginContact(contact: SKPhysicsContact) {

        if contact.bodyA.categoryBitMask == PhysicsCategory.overPow || contact.bodyB.categoryBitMask == PhysicsCategory.overPow{
            let sk = delegateForCollision!.view as! SKView
            let newScene = GG(fileNamed: "GG")
            newScene!.delegateFor = delegateForCollision
            newScene?.scaleMode = .AspectFill
            sk.presentScene(newScene)
        }
        if contact.bodyA.categoryBitMask == PhysicsCategory.glem && contact.bodyB.categoryBitMask == PhysicsCategory.kappa{
            contact.bodyA.node?.removeFromParent()

            glem++
            glemLabel.text = "SKAŁY: \(glem)"

        }

        if contact.bodyB.categoryBitMask == PhysicsCategory.glem && contact.bodyA.categoryBitMask == PhysicsCategory.kappa{
            contact.bodyB.node?.removeFromParent()

            glem++
            glemLabel.text = "SKAŁY: \(glem)"
        }


    }

glemkappa categoryBitMask节点发生冲突,因此glem变量应该是++一次,然后节点从场景中删除,但看起来此方法被称为更多下一帧期间的时间。我在日志中看到它,因为我在glem didSet中添加了print("\(glem)")。为什么会这样?

1 个答案:

答案 0 :(得分:0)

我将glem++更改为if contact.bodyB.node?.parent != nil{glem++} ,现在它可以正常工作。