2
我的目標:添加一個到成果二等量變量,然後更新文本,使其顯示在所謂的「AmountLabel」更新SKLabel文本通過SKNode子
所以我有一個子類的SKLabelNode SKNode收容所我SKSpriteNode,顯示成就的標誌和成果,並解鎖成就所需要的量的稱號SKLabelNodes,如下圖所示:
class Achievements: SKNode {
var achievementLabel = SKLabelNode()
var achievementTitleLabel = SKLabelNode()
var achievementNode = SKSpriteNode()
var amount = 0
var neededAmount = 0
var Image: String = "locked" {
didSet {
var texture = SKTexture(imageNamed: Image)
}
}
func createAchievement() {
let tex:SKTexture = SKTexture(imageNamed: Image)
achievementNode = SKSpriteNode(texture: tex, color: SKColor.black, size: CGSize(width: 75, height: 75)) //frame.maxX/20, height: frame.maxY/20))
achievementNode.zPosition = -10
achievementNode.name = "AchievementNode"
amount = 0
neededAmount = 10
self.addChild(achievementNode)
self.zPosition = -11
Achievements3.append(achievementNode)
createAchievementLabels()
}
func createAchievementLabels() {
achievementTitleLabel = SKLabelNode(fontNamed: "Avenir-Black")
achievementTitleLabel.fontColor = UIColor.black;
achievementTitleLabel.fontSize = 13 //self.frame.maxY/30
achievementTitleLabel.position = CGPoint (x: 0, y: 45)
achievementTitleLabel.text = "COLLECTOR"
achievementTitleLabel.zPosition = -9
addChild(achievementTitleLabel)
achievementTitleLabel.name = "AchievementTitleLabel"
achievementLabel = SKLabelNode(fontNamed: "Avenir-Black")
achievementLabel.fontColor = UIColor.black;
achievementLabel.fontSize = 13 //self.frame.maxY/30
achievementLabel.position = CGPoint (x: 0, y: -50)
achievementLabel.text = ("\(amount)/\(neededAmount)")
achievementLabel.zPosition = -9
addChild(achievementLabel)
achievementLabel.name = "AmountLabel"
AchievementLabels.append(achievementLabel)
}
func UpdateText() {
achievementLabel.text = ("\(amount)/\(neededAmount)")
}
}
他們在被稱爲另一個類,然後加入AchievementMenu像這樣:
在AchievementMenu類,我試圖通過節點樹枚舉能夠更新標籤添加一個到其量變量,然後另一個函數for 0...12 {
let Achievement = Achievements()
Achievement.createAchievement()
Achievement.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
Achievement.zPosition = 100
moveableArea.addChild(Achievement)
}
然後更新它的文本,像這樣:
func addOneToAchievementAndUpdateText() {
moveableArea.enumerateChildNodes(withName: "SKNode") {
node, stop in
let LabelAmount:Achievements = node as! Achievements
node.enumerateChildNodes(withName: "AmountLabel") {
node, stop in
LabelAmount.amount += 1
LabelAmount.UpdateText()
}
}
}
,但每次我嘗試投出變量作爲實際上課的時候它給了我一個錯誤:
Could not cast value of type 'SKLabelNode' (0x10e5edb08) to 'Astrum.Achievements' (0x10c899438).
如何添加一個到量變量,然後更新文本,使其顯示新的金額在scre上恩?
這會達到我想要添加到量變量和更新文本? – Astrum
在獲得成就的確切時刻,您也可以啓動achievement.UpdateText()並訪問量var –
因此,我只是在let語句之後和作爲類的投射之後訪問它。 – Astrum