【问题标题】:Change the text of a SKLabelNode added from the scene editor更改从场景编辑器添加的 SKLabelNode 的文本
【发布时间】:2017-04-14 18:47:07
【问题描述】:

我想更改在名为 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()
    }

}

在碰撞后的那一刻,应用程序崩溃并显示“在展开可选值时意外发现 nil”。我做错了什么,我怎么能做对?谢谢!

【问题讨论】:

  • myScoreLabel 与您共享的代码无关
  • 如何让它不为零?

标签: ios swift sprite-kit skscene sklabelnode


【解决方案1】:

不会从您提供的代码中创建 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.text = "Test" //Must add '.text' otherwise will not compile
     }
}

【讨论】:

  • 啊,好的,谢谢,为了清晰起见,我添加了一个屏幕截图,我希望我可以在场景编辑器中创建它,而不是通过编程方式创建它。知道如何更改在场景编辑器中创建的 SKLabelNode 的文本吗?
【解决方案2】:

太好了,所以最后我做到了:

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 2021-04-24
    • 2023-03-20
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多