2017-04-14 1 views
1

enter image description hereシーンエディタmyScoreLabelで作成されたSKLabelNodeのテキストを変更して、2つのオブジェクトの衝突時のスコアを更新します。 「オプションの値をアンラップしながら、意外ゼロ」シーンエディタから追加されたSKLabelNodeのテキストを変更します

class holeOne: SKScene, SKPhysicsContactDelegate { 

    var myScoreLabel: SKLabelNode! 
    var myscore:Int = 0 

    func addScore() { 
     myscore += 1 
     myScoreLabel.text = "\(myscore)" 
    } 

    func didBegin(_ contact: SKPhysicsContact) { 
     addScore() 
    } 

} 

すると、アプリがクラッシュは、衝突後に現時点では:ここでは、関連するコードです。私は間違って何をしていますか、どうすればそれを正しく行うことができますか?ありがとう!

+0

myScoreLabelあなたが –

+0

を共有コードからnillは、私はそれがないゼロにするにはどうすればよいのですか? –

答えて

2

あなたが提供するコードvar myScoreLabel: SKLabelNode!から作成されていません。

SKLabelNodeを最初に作成してください。そして値を設定します。

例:

myScoreLabel = SKLabelNode(fontNamed: "Chalkduster") 
myScoreLabel.text = "Test" 
myScoreLabel.horizontalAlignmentMode = .right 
myScoreLabel.position = CGPoint(x: 0, y:10) 
addChild(scoreLabel) 

それとも、.sksシーンからそれを接続することができます。最後に、私はこれをしなかったので、

override func sceneDidLoad() { 
    if let label = self.childNode(withName: "myScoreLabel") as? SKLabelNode { 
     label = "Test" 
    } 
} 
+0

ああ、ありがとう、私は、プログラムではなく、シーンエディタでそれを作成することができることを望んでいたわかりやすいスクリーンショットを追加しました。どのように私はシーンエディタで作成されたSKLabelNodeのテキストを変更するか? –

+0

@TomWicks私の答えを更新する –

0

グレート、:

class holeOne: SKScene, SKPhysicsContactDelegate { 

    var myScoreLabel: SKLabelNode! 
    var myscore:Int = 0 

    func addScore() { 
     myscore += 1 

     if let myScoreLabel = self.childNode(withName: "myScoreLabel") as? SKLabelNode { 
      myScoreLabel.text = "\(myscore)" 
     } 

    } 

    func didBegin(_ contact: SKPhysicsContact) { 
     addScore() 
    } 

} 
関連する問題