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