在Swift中设置一段时间后更改变量的值

时间:2016-05-01 10:59:22

标签: swift

我正在制作类似于Swift陷阱的游戏,我正在尝试制作一个布尔值,显示玩家是否跳跃。我希望布尔值在3秒后变为false,以便玩家再次向下移动。我尝试过使用延迟功能但是没有用。 提前谢谢。

4 个答案:

答案 0 :(得分:2)

试试这个:

let delay = 3 // seconds to wait before firing 
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(delay)) {
    // set your var here
}

将DispatchQueue.main替​​换为您正在使用的任何队列。

答案 1 :(得分:0)

以下代码段描述了具有Player属性的isJumping个对象。当它设置为true时(使用didSet),它会自动启动一个计时器,在3秒后将isJumping重置为false

请注意,该代码段不会使用NSTimer扩展名来舒适地启动和处理计时器。致https://gist.github.com/natecook1000/b0285b518576b22c4dc8

的积分
class Player {    
  private var resetJumpingTimer: NSTimer?
  var isJumping: Bool = false {
    didSet {
      resetJumpingTimer?.invalidate() // Stops the timer in case it was already started
      if isJumping {
        self.resetJumpingTimer = NSTimer.schedule(3.0) { [weak self] _ in
          self?.isJumping = false
        }
      }
    }
  }
}

extension NSTimer {
  class func schedule(delay delay: NSTimeInterval, handler: NSTimer! -> Void) -> NSTimer {
    let fireDate = delay + CFAbsoluteTimeGetCurrent()
    let timer = CFRunLoopTimerCreateWithHandler(kCFAllocatorDefault, fireDate, 0, 0, 0, handler)
    CFRunLoopAddTimer(CFRunLoopGetCurrent(), timer, kCFRunLoopCommonModes)
    return timer
  }
}

答案 2 :(得分:0)

玩家跳转后,您会创建一个NSTimer

声明全局变量let timer = NSTimer()var seconds = 3

然后在玩家跳转后设置计时器:

timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(YOUR_CLASS_NAME.updateTimer()), userInfo: nil, repeats: true)

然后方法:

func updateTimer() {
    seconds -= 1
    if seconds == 0 {
        // Do stuff
        timer.invalidate() // Stop the timer
        seconds == 3 // Reset # of seconds
    }

试一试。

答案 3 :(得分:0)

  fun update(){
seconds -= 1
if seconds <= 0{
score = 5
  }
}

如果你没有使计时器无效,你可能想要它&lt; =。这样它就会保留变量等等。