2017-04-14 74 views
1

enter image description here我想改變命名myScoreLabel更新兩個物體碰撞的得分場景編輯器創建一個SKLabelNode的文本添加了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() 
    } 

}