У вас две проблемы. Во-первых, вы никогда не получите доступ к scoreLabel
за пределами didMove
, поэтому метка счета никогда не изменится. Вы должны написать код, чтобы обновить метку счета, как продемонстрировал Александру в своем ответе.
Ваша вторая проблема заключается в том, что у вас есть две scoreLabel
переменные, глобальная переменная и локальная scoreLabel
переменная let в функции didMove
. Когда вы объявляете scoreLabel
в didMove
,
let scoreLabel = SKLabelNode(fontNamed: "Chalkduster")
scoreLabel.text = "Total Coins: \(score)"
scoreLabel.fontSize = 40
scoreLabel.fontColor = SKColor.black
scoreLabel.position = CGPoint(x: size.width/2, y: size.height/1.5)
addChild(scoreLabel)
Эта версия scoreLabel
исчезает, когда вы выходите didMove
. Теперь, если у вас есть доступ к глобальному scoreLabel
для отображения счета, метка будет пустой. Вы загрузили и установили все на временную локальную версию.
Самый простой способ решить эту проблему и избежать путаницы - это иметь только одну переменную scoreLabel
. Избавьтесь от глобального scoreLabel
и объявите scoreLabel
как свойство класса GameScene
. Затем в didMove
удалите разрешение на загрузку scoreLabel
.
scoreLabel = SKLabelNode(fontNamed: "Chalkduster")
Теперь значение scoreLabel
будет сохраняться после завершения загрузки сцены. Если вы обновите scoreLabel
в adjustScore
, счет должен обновиться.
Еще одна вещь. Если у вас есть ответ о том, что что-то не работает, вам нужно предоставить больше информации, чем «Я попробовал это, и это не сработало». Это не полезный ответ. Вы должны описать, что не сработало, иначе придется много взад и вперед пытаться получить соответствующую информацию, увеличивая время, необходимое для получения решения.