好的,首先我有一个成就变量,它是从如下结构定义的:

struct Achieve {

var node: SKSpriteNode?
var aName:String = ""
var aDes:String = ""
var aImage: String = "" {
    didSet {
        node?.texture = SKTexture(imageNamed: aImage)
    }
}
var aAmount:Int = 0
var aRequired:Int = 0
var aStage:Int = 0

}

var Ach1 = Achieve(node: nil, aName: "Player", aDes: "Games Played", aImage: "locked", aAmount: 0, aRequired: 10, aStage: 1)

我的问题是,当我尝试更改a amount属性的编号时,它不会显示在sklabel上,而sklabel会显示它仅保持在0的数量,我的sklabel是在如下函数中定义的:
func generateLabels(location: CGPoint, page:SKSpriteNode, text: String) -> SKLabelNode {

        let node = SKLabelNode()
        node.fontColor = UIColor.whiteColor()
        node.fontName = "Helvetica"
        node.position = location
        node.fontSize = 15
        node.text = text
        page.addChild(node)
        return node
}

func menu() {

_ = generateLabels(CGPointMake(0, -285), page:page1ScrollView, text: "\(Ach1.aAmount) / \(Ach1.aRequired)")

}

当我停止运行aamount,然后更改它,然后再次运行游戏时,对其进行更改似乎是可行的。在游戏过程中,它似乎也对aamount属性进行了更改,但在游戏过程中,由于某些原因,它似乎没有更新标签。有人能告诉我为什么不更新吗?
另外,我正在更新aamount属性,如下所示:
 Ach1.aAmount += 1
 print("\(Ach1.Amount)")

最佳答案

Achieve结构中,添加名为label的属性:

var label: SKLabelNode?

并将aAmount属性更改为如下所示:
var aAmount: Int = 0 {
    didSet {
        label?.text = "\(aAmount) / \(aRequired)"
    }
}

现在,在生成标签时,请替换以下内容:
_ = generateLabels(CGPointMake(0, -285), page:page1ScrollView,
    text: "\(Ach1.aAmount) / \(Ach1.aRequired)")

带着这个
var label = _ = generateLabels(CGPointMake(0, -285), page:page1ScrollView,
    text: "\(Ach1.aAmount) / \(Ach1.aRequired)")
Ach1.label = label

现在,当您更改aAmountAch1属性时,标签的文本也应该更改。
建议:
从这个问题和你最后一个关于sprite节点图像没有更新的问题来看,我认为你的编程技巧还不够成熟。从长远来看,你应该先学习基本知识。尝试玩UIKit并阅读更多其他人的代码。看看别人是怎么做事的。你一定会学到很多。不过,在短期内,不应该让所有这些属性都绑定到节点。这将使Achieve过于依赖。您应该做的是使Achieve成为SKSpriteNode的子类,并将其他sprite节点和标签节点添加为Achieve节点的子节点。

09-25 18:23