swift - 使 NSTimer 无效无效

标签 swift sprite-kit nstimer

我有一个设置为 150 秒的 NSTimer,当它下降到 0 时,它应该停止计数并结束我正在创建的游戏。但是,当我调用 invalidate() 时,它会继续运行。我也有它,所以当计时器无效但没有运气时它应该打印“计时器停止”。还有另一种方法吗?

这是我的代码:

import SpriteKit
var countDown: NSTimer()

class GameScene: SKScene {
  override func didMoveToView(view:SKView)
   countDown = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "subtractTime", userInfo: nil, repeats: true)

}
 override func update() {
  if countDown == 0 {
      countDown.invalidate()
       print("Timer stopped")
     }

最佳答案

这是因为您将 countDownInt 值进行比较。如果您需要在触发时使计时器无效 - 在 subtractTime 方法中执行。

您还提到您将计时器设置为 150 秒。但在代码示例中它是 1.0。所以我建议你希望你的选择器被调用 150 次,延迟一秒。如果是这样,您可以简单地添加计数器变量:

var counter = 0
...
func subtractTime() {
  counter += 1
  if counter == 150 {
    countDown.invalidate()
    countDown = nil // also add this line to escape retain cycle
    return
  }
  ...
}

关于swift - 使 NSTimer 无效无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33549100/

相关文章:

swift - 仅在其父级边界内显示 Sprite 图像

ios - 使用 SpriteKit 手势同时分别拖动、旋转和缩放多个 Sprite

swift - 使用 NSTimer 的重复函数失败,目标为 : self in Swift

iphone - 进入后台时使 NSTimer 无效

ios - 是否可以在 Swift 中更改运行时的本地化语言?

ios - spritekit,纹理图像有时加载有时不加载

ios - 生产应用程序中的 Swift 断言行为

ios - Swift 和 Obj-C 中的 NSTimer

ios - 错误 : memory read failed for 0x0 Xcode 7. 3.1

ios - 如何删除 ZStack SwiftUI 中的填充