Текстура спрайта не меняется после запуска анимации в SpriteKit - PullRequest
0 голосов
/ 06 марта 2020

Приведенный ниже код запускает анимацию и после завершения запускает функцию resetBall.

Почему строка (ball.texture = normalTexture) не работает? (добавление себя перед ним не решает проблему)

Любая помощь будет принята с благодарностью!

    func resetBall() {
        ballDying = false
        let normalTexture = SKTexture(imageNamed: "Ball1")
        ball.texture = normalTexture
        self.ball.position = CGPoint(x: -120, y: 40)
    }

    var ballDying = false

    override func update(_ currentTime: TimeInterval) {
        if ((map_1_buffer.contains(ball.position)) == false) && !ballDying {
            ballDying = true
            let texture1 = SKTexture(imageNamed: "death_1")
            let texture2 = SKTexture(imageNamed: "death_2")
            let texture3 = SKTexture(imageNamed: "death_3")
            let deathAnimation = SKAction.animate(with: [texture1, texture2, texture3], timePerFrame: 1)
            self.ball.run(deathAnimation, completion: resetBall)
        }
    }

1 Ответ

1 голос
/ 06 марта 2020

Возможно, подход с использованием метода обновления - не лучший способ сделать это. Запомните документацию по функции обновления: https://developer.apple.com/documentation/spritekit/skscenedelegate/1519757-update?language=objc

Не вызывайте этот метод напрямую ; он вызывается системой ровно один раз за кадр, при условии, что сцена представлена ​​в виде и не приостановлена. Это первый метод, который вызывается при анимации сцены, перед тем, как оцениваются какие-либо действия и перед тем, как симулируется любая физика.

Старайтесь избегать добавления сложного кода в функцию обновления.

Теперь , для текстуры проблема, вероятно, может быть решена с помощью

let normalTexture = SKTexture(imageNamed: "blueBall")
ball?.run(SKAction.setTexture(normalTexture))

Вы можете увидеть полный пример здесь: https://github.com/Maetschl/SpriteKitExamples/blob/master/BouncingBalls/BouncingBalls/GameScene.swift

...