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()
}
Другие вопросы по тегам