2016-08-15 6 views
0

私はswift2を学んでいます。私は友人プロジェクトを使用しています。彼はゲームのためのカウンターを持っていますが、私はユーザーが死ぬときにラベルを作成したいと思います。私はスコアラベルを(スコア)に設定しようとしましたが、コードはスコアを0に設定し、チャンスなしでカウントしますscore。私はスコアを更新する方法を知らない。これには、あなたのコードが実際にscoreの更新値を見て、コードwillSetを使って新しいスコアを設定する

var score:Int = 0 { 
    willSet { 
     let scoreBand = childNodeWithName(StickHeroGameSceneChildName.ScoreName.rawValue) as? SKLabelNode 
     scoreBand?.text = "\(newValue)" 
     scoreBand?.runAction(SKAction.sequence([SKAction.scaleTo(1.5, duration: 0.1), SKAction.scaleTo(1, duration: 0.1)])) 

     if (newValue == 1) { 
      let tip = childNodeWithName(StickHeroGameSceneChildName.TipName.rawValue) as? SKLabelNode 
      tip?.runAction(SKAction.fadeAlphaTo(0, duration: 0.4)) 
     } 
    } 
} 

    let scoreLbl = SKLabelNode(fontNamed: "AmericanTypewriter") 
    scoreLbl.position = CGPointMake(0, 200) 

    scoreLbl.text = "\(newValue)" // , this throws error, tried score but it = 0 

    node.addChild(scoreLbl) 
+0

@ EricAya、私はそれをやってみましたが、それは常に0です...なぜですか? – hahu

+0

'score'が設定される前に' willSet'が実行され、 'score'がデフォルトの' 0'で始まるので、 '常に0'です。 – GoZoner

答えて

0

使用didSetです。そのように:しかし

class Foo { 
    var score:Int = 0 { 
    didSet { 
     let scoreBand = childNodeWithName(
     StickHeroGameSceneChildName.ScoreName.rawValue) as? SKLabelNode 
     scoreBand?.text = "\(score)" 
     scoreBand?.runAction(
     SKAction.sequence([SKAction.scaleTo(1.5, duration: 0.1), 
          SKAction.scaleTo(1 , duration: 0.1)])) 

     if (score == 1) { 
     let tip = childNodeWithName(
      StickHeroGameSceneChildName.TipName.rawValue) as? SKLabelNode 
     tip?.runAction(SKAction.fadeAlphaTo(0, duration: 0.4)) 
     } 
    } 
    } 
} 

scoreBandtipはそう、彼らはアクセスできませんだけdidSetのコンテキストでバインド変数であることに注意してください。したがって、返されたSKLabelNodeが変更可能である(おそらくそれがそうである)場合にのみ、「子ノード」への変更が表示されます。

関連する問題