У меня есть два SKLabelNodes, один из которых отображает счет, а другой действует как тень за счетом. Каждый раз, когда мой игрок проходит через цель, я обновляю метки очков, увеличивая их на 1 пункт, вызывая метод updateScoreLabels (), приведенный ниже.
Но по какой-то причине, независимо от того, какую zPosition я установил для каждого из этих узлов SKLabelNode, два узла рисуются в случайном порядке, и каждый раз, когда я вызываю метод updateScoreLabels (), их порядок меняется случайным образом. Также не имеет значения, какой у меня установлен параметр .ignoresSiblingOrder, или не будет иметь значения, если я добавлю один SKLabelNode как дочерний элемент другого. Узлы просто игнорируют zPosition. Что я делаю неправильно? Вот мой код:
Этот метод вызывается в didMoveToView ():
func createScoreLabel() {
//Configure score label
scoreLabel = SKLabelNode(fontNamed: "8BIT WONDER Nominal")
scoreLabel.text = "O"
scoreLabel.fontSize = 32
scoreLabel.position = CGPoint(x: -UIScreen.main.bounds.size.width/2 - scoreLabel.frame.size.width/2, y: UIScreen.main.bounds.size.height/2 - scoreLabel.frame.size.height/2 - 60)
scoreLabel.zPosition = 999
//Configure shadow
scoreLabelShadow.attributedText = NSAttributedString(string: "O", attributes: scoreLabelShadowAttributes)
scoreLabelShadow.position = CGPoint(x: -UIScreen.main.bounds.size.width/2 - scoreLabel.frame.size.width/2, y: UIScreen.main.bounds.size.height/2 - scoreLabel.frame.size.height/2 - 60)
scoreLabelShadow.zPosition = -9999999999
//Add labels
cam.addChild(scoreLabel)
cam.addChild(scoreLabelShadow)
//Animate labels
scoreLabel.run(SKAction.move(to: CGPoint(x: -UIScreen.main.bounds.size.width/2 + scoreLabel.frame.size.width/2 + 30, y: UIScreen.main.bounds.size.height/2 - scoreLabel.frame.size.height/2 - 60), duration: 0.1))
scoreLabelShadow.run(SKAction.move(to: CGPoint(x: -UIScreen.main.bounds.size.width/2 + scoreLabel.frame.size.width/2 + 30, y: UIScreen.main.bounds.size.height/2 - scoreLabel.frame.size.height/2 - 60), duration: 0.1))
}
и затем это вызывается, когда я увеличиваю метки оценки. Всякий раз, когда это называется, zPositions переворачивается случайным образом:
func updateScoreLabel() {
let formattedScore = String(score).replacingOccurrences(of: "0", with: "O")
scoreLabel.text = String(formattedScore)
scoreLabelShadow.attributedText = NSAttributedString(string: formattedScore, attributes: scoreLabelShadowAttributes)
}