更改从场景编辑器添加的SKLabelNode的文本

时间:2017-04-14 18:47:08

标签: ios swift sprite-kit skscene sklabelnode

enter image description here我想更改在名为myScoreLabel的场景编辑器中创建的SKLabelNode的文本,以更新两个对象碰撞时的分数。这是相关的代码:

class holeOne: SKScene, SKPhysicsContactDelegate {

    var myScoreLabel: SKLabelNode!
    var myscore:Int = 0

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

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

}

在碰撞后的那一刻,应用程序崩溃,“在解开一个Optional值时意外发现了nil”。我做错了什么,我该怎么做?谢谢!

2 个答案:

答案 0 :(得分: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"
     }
}

答案 1 :(得分: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()
    }

}