Tworzę grę, ta funkcja służy do zmniejszania duszka. Chcę, aby ta funkcja działała przez 5 sekund i dołączam ten 5-sekundowy zegar do etykiety jako odliczanie. Po zakończeniu funkcji przywróć duszka do jego oryginalnego rozmiaru.

Funkcja po prostu zmniejsza węzeł, ustawiając skalę.

func shrinkShip() { spaceShip.scale(to: CGSize(width: 60, height: 40)) }

1
Frank Boccia 3 kwiecień 2020, 16:40

4 odpowiedzi

Najlepsza odpowiedź

Pozostając przy SpriteKit, wykonałbym tylko następujące czynności

func shrinkShip(duration: Double) { 

    let originalSize = spaceShip.size

    spaceShip.scale(to: CGSize(width: 60, height: 40)) 

    for x in 0..<Int(duration) {

        //increment the timer every 1 second for the duration
        self.run(SKAction.wait(forDuration: 1 * Double(x))) {
            self.timerLabel.text = String(Int(duration) - x)
        }
    }
    self.run(SKAction.wait(forDuration: duration)) {
        //return the spaceship to full size
        self.spaceShip.scale(to: originalSize) 
        //hide the timer
        self.timerLabel.text = ""
        self.timerLabel.isHidden = true
    }
}
2
Ron Myschuk 3 kwiecień 2020, 19:01

Możesz animować widok w następujący sposób:

UIView.animate(withDuration: 5, animations: {
        self.spaceShip.scale(to: CGSize(width: 60, height: 40))
},
completion: { _ in
    UIView.animate(withDuration: 2) {
        self.spaceShip.transform = .identity // Reset your view
    }
})
0
Mickael Belhassen 3 kwiecień 2020, 14:07

Rozwiązaniem SpriteKit może być:

let node =  SKSpriteNode()
let scale = SKAction.scale(by: 0.1, duration: 5.0)
let sequence = SKAction.sequence([
    scale,
    SKAction.customAction(withDuration: 0, actionBlock: { (_, _) in
        // Change label?
    }),
    scale.reversed()
])
node.run(sequence)
-2
Maetschl 3 kwiecień 2020, 14:45

Możesz spróbować czegoś takiego

UIView.animate(withDuration: 5, animations: {
        self.spaceShip.transform = CGAffineTransform(scaleX: 60, y: 40)
},
completion: { _ in
    UIView.animate(withDuration: 2) {
        self.spaceShip.transform = .identity // Reset your view
    }
})
0
Nisarg Shah 3 kwiecień 2020, 14:23