SKLabel.text Целое число не обновляется - swift
Я создаю игру, и я создал целое число, которое отслеживает количество убитых врагов, однако я не могу обновить склейбл в пользовательском интерфейсе. независимо от того, сколько врагов целое число продолжало отображать 0. Вот некоторые из методов, которые я пробовал
class GameScene: SKScene, SKPhysicsContactDelegate {
var Enemy1KillCounter = 0
var Enemy1KillCounterLabel = SKLabelNode ()
override func didMoveToView(view: SKView) {
createEnemyKilledLabel()
}
func createEnemyKilledLabel() {
Enemy1KillCounterLabel.fontSize = 65
Enemy1KillCounterLabel.fontColor = SKColor .blackColor()
Enemy1KillCounterLabel.position = CGPointMake(400, 400)
self.addChild(Enemy1KillCounterLabel)
}
func updateEnemy1KillCounter() {
Enemy1KillCounter += 1
Enemy1KillCounterLabel.text = "\(Enemy1KillCounter)"
score = score + 15
//enemy1Killed = true I had tried Boolean values as well
print("updateEnemy1KillCounter")
}
//this method is called in my enemy1 class when its "killed"
func Enemy1DieG () {
updateEnemy1KillCounter()
}
}
Я также пытался использовать метод обновления с булевыми значениями, связанными с несколькими различными способами, но ни один не работал.
override func update(currentTime: CFTimeInterval) {
if enemy1Killed {Enemy1KillCounter += 1}
Enemy1KillCounterLabel.text = "\(Enemy1KillCounter)"
}
вот мой класс врага и где я вызываю метод "врага1ДиГ"
Я вызываю метод попадания в методе контакта, но я знаю, что это не проблема, потому что когда враг "убит", когда он поражен 5x, то вызывается метод врага1die и killCounter
class Enemy1: SKNode {
var Enemy1Health:Int = 50
func hit() ->Bool {
Enemy1Health -= 10
Bullet1GoAway = true
if ( Enemy1Health <= 0 ) {
Enemy1Die()
return true
} else {
return false
}
}
func Enemy1Die () {
self.removeFromParent()
Enemy1KillCounter()
}
func Enemy1KillCounter (){
GameScene().Enemy1DieG()
}
}
это так странно, что все методы вызываются, я использовал значения print для каждого метода, чтобы убедиться, но мое целое число не обновляется в моем пользовательском интерфейсе, оно просто продолжает отображать 0. Это, вероятно, такой простой ответ, и я продолжаю пропускать его, если кто-нибудь может помочь, это было бы здорово.
1 ответ
Когда внутри Enemy1KillCounter()
ты пишешь
GameScene().Enemy1DieG()
Вы НЕ используете GameScene, показанный на экране.
Вместо этого вы временно создаете новый пустой экран, вызывая Enemy1DieG()
на это, и они уничтожают это.
Пожалуйста, замените это
func Enemy1KillCounter (){
GameScene().Enemy1DieG()
}
с этим
func Enemy1KillCounter() {
guard let gameScene = self.scene as? GameScene
else { fatalError("Current node is not inside a GameScene") }
gameScene.Enemy1DieG()
}