![](/img/trans.png)
[英]Problems switching between playlists and setting timers in Swift iOS MPMediaPlayer app
[英]Permanently disable Timers - iOS Swift 4
玩家未能在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-函数中,在场景更改之前...)编写以下三个语句来解决此问题,但显然没有任何帮助。
先感谢您!
time.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(GameScene_1.updateTimer)), userInfo: nil, repeats: true)
这将创建一个保留循环。 视图控制器保留计时器(通过我假设的time
;目前尚不清楚确切的time
),而计时器保留计时器(通过target: self
)。 即使不正确,计时器也会在运行循环中保留,因此time.timer = nil
不会停止它。
目前还不清楚什么time
是在这里,所以我不正是某些你所需要的代码,但你想要的工具是invalidate()
每当视图离开屏幕( viewWillDisappear
)时,以及每次更换计时器时,都需要调用timer.invalidate()
。 我通常使用类似:
var timer: Timer? {
willSet {
timer?.invalidate()
}
}
这样,无论何时您将其分配给timer
,旧计时器都会失效(这几乎总是您的意思)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.