从Swift中的SKSpriteNode子类更新SKScene中保存的游戏分数

时间:2015-05-01 15:48:49

标签: ios swift sprite-kit skspritenode skscene

我们有一个主游戏场景SKScene,它拥有HUD逻辑和分数。

对于一个对象,我们还有一个SKSpriteNode的子类。当点击对象时,我们处理SKSpriteNode子类中的触摸。

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

我们想要做的是在点击游戏时更新游戏内的分数。如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

  

我认为

  1. GameScene有一个名为SKLabelNode
  2. 的孩子"scoreLabel"
  3. "scoreLabel"显示游戏的当前得分
  4. GameScene有一个名为SKSpriteNode
  5. 的孩子"mySprite"
  6. "mySprite"收到点击时,得分必须增加1
  7. GameScene有一个私有财产var score = 0
  8.   

    这是你应该如何实现touchesBegan:withEvent

    class GameScene: SKScene {
    
        private var score = 0
    
        override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
            if
                let touch = touches.first as? UITouch,
                let tappedSprite = nodeAtPoint(touch.locationInNode(self)) as? SKSpriteNode,
                let scoreLabel = childNodeWithName("scoreLabel") as? SKLabelNode
                where tappedSprite.name == "mySprite" {
                    score += 1
                    scoreLabel.text = "Score: \(score)"
            }
        }
    }
    
      

    <强>解释

    第一个条件选择第一个接收到的触摸。如果触摸至少有触摸,这将成功。 (理论上,这条线永远不会失败。)

    第二个条件会检索包含触摸点的SKNode,然后尝试将此节点强制转换为SKSpriteNode

    第三个条件尝试检索名为SKLabelNode的{​​{1}}。

    检查所检测的精灵的名称为"scoreLabel"

    如果这4个条件成功,则私有财产分数增加1,标签文本更新。

    希望这有帮助。