Я пытаюсь полностью перезагрузить игровую сцену после того, как игроку не удалось достичь цели через 10 секунд.
Я использую запланированную функцию таймера для отсчета секунд.
func runTimer() {
time.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(GameScene_1.updateTimer)), userInfo: nil, repeats: true)
}
Вот вызываемая функция сверху:
@objc func updateTimer() {
if time.seconds == 0 {
//Lost the game - reload
reloadLevel()
}else{
...
}
}
Когда я перезагружаю игру со следующим кодом, скорость обратного отсчета становится слишком высокой.
func reloadLevel(){
//Reset
time.seconds = 10
time.timer = nil
//Reload Level
let newScene = GameScene_1(fileNamed: "GameScene_1")
newScene?.scaleMode = self.scaleMode
let animation = SKTransition.flipVertical(withDuration: 2)
self.view?.presentScene(newScene!, transition: animation)
}
Эта функция runTimer () вызывается только один раз в моем проекте, и это когда пользователь заканчивает, чтобы коснуться экрана. До этого момента все было хорошо, но после этого кажется, что несколько таймеров начинают обратный отсчет сразу.
Кто-нибудь знает, как я могу перезагрузить сцену "чистым" способом, чтобы ничего из сцены до этого не было сохранено?
... или как я могу навсегда остановить / удалить предыдущий таймер?
Я пытался написать следующие три утверждения в соответствующих местах (в функции didMove, до изменения сцены ...), чтобы решить эту проблему, но, очевидно, ничего не помогло.
Заранее спасибо!