Swift Spritekit 联系位掩码和分数标签

Swift Spritekit Contact Bitmask and Score Label

我是一个相当新的程序员,试图让它在像游戏这样的砖块断路器中,当球击中球拍时,我想在比分上加一分。我想我已经走到一半了,但想不通。

    let BallCategory   : UInt32 = 0x1 << 0 // 
    let BottomCategory : UInt32 = 0x1 << 1 //
    let BlockCategory  : UInt32 = 0x1 << 2 //
    let PaddleCategory : UInt32 = 0x1 << 3 //

    bottom.physicsBody?.categoryBitMask = BottomCategory
    bottom.physicsBody?.contactTestBitMask = BallCategory
    paddle.physicsBody?.categoryBitMask = PaddleCategory
    paddle.physicsBody?.contactTestBitMask = BallCategory
    paddle.physicsBody?.collisionBitMask = BallCategory
    ball.physicsBody?.categoryBitMask = BallCategory
    ball.physicsBody?.contactTestBitMask = BottomCategory | PaddleCategory
    ball.physicsBody?.contactTestBitMask = PaddleCategory

    var score = 0
            func didBeginContact(contact: SKPhysicsContact) {
                score = +1
            }

    let label = SKLabelNode(fontNamed: "Chalkduster")
            label.text = String(score)
            label.fontSize = 50
            label.fontColor = SKColor.whiteColor()
            label.position = CGPoint (x: 568, y: 600)
            addChild(label)

这些是我的代码的三个部分,我认为我需要更改才能让我的游戏中的分数正常工作,如果你能帮助我,我将不胜感激。

在增加 didBeginContact 中的 score 之前,您必须测试碰撞体是否具有正确的 bitmasks。您可以使用以下代码来增加 score 球拍与球之间的碰撞。

func addScore() {
    score += 1
    scoreLabel.text = "\(score)"
}

func didBeginContact(contact: SKPhysicsContact) {

    var body1 : SKPhysicsBody!
    var body2 : SKPhysicsBody!

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        body1 = contact.bodyA
        body2 = contact.bodyB
    }
    else  {
        body1 = contact.bodyB
        body2 = contact.bodyA
    }

    if body1.categoryBitMask == BallCategory && body2.categoryBitMask == PaddleCategory {
        addScore()
    }
}