2016-08-15 1 views
0

Also lerne ich swift2 und ich benutze ein Freunde-Projekt. Er hat einen Zähler für das Spiel, aber ich möchte ein Etikett erstellen, wenn der Benutzer stirbt. Ich habe versucht, die Score-Label zu setzen (Score), aber der Code setzt den Score auf 0 und zählt ohne Chance score. Ich weiß nicht, wie man Punkteaktualisierung macht. Dies ist der CodeEinstellen eines neuen Ergebnisses mit 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, habe ich versucht, aber es immer 0 ... Warum ist das? – hahu

+0

Es ist 'immer 0', weil 'willSet' läuft, bevor' score' gesetzt wird und somit 'score' mit dem Standardwert' 0' beginnt. – GoZoner

Antwort

0

Verwenden didSet so der Code tatsächlich den aktualisierten Wert von score sieht. Als solche:

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)) 
     } 
    } 
    } 
} 

Beachten Sie jedoch, dass scoreBand und tip Variablen gebunden nur im Rahmen von didSet, damit sie nicht zugänglich sein. Daher sind Ihre Änderungen an den 'Kind-Knoten' nur sichtbar, wenn der zurückgegebene SKLabelNode veränderbar ist (vermutlich ist es das).

Verwandte Themen