2015-03-03 26 views
2

我是一個相當新的程序員,試圖使它在磚塊破碎機如遊戲時,當球擊中球時,我想添加一分到得分。我想我在那裏,但無法弄清楚。Swift Spritekit聯繫位掩碼和分數標籤

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) 

這是我的代碼,我相信我需要爲了在我的遊戲分數,努力改變,如果你能幫助我,我將不勝感激三個部分。

回答

1

在增加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() 
    } 
} 
+0

該代碼現在給出的錯誤「不能引用本地函數捕獲從另一個本地函數。」該錯誤位於didBeginContract函數的addScore()行中。 @rakeshbs – 2015-03-03 04:51:35

+1

沒關係,它採取了一些修補,但我得到它的工作非常感謝 – 2015-03-03 16:53:06