我正在制作类似于Swift陷阱的游戏,我正在尝试制作一个布尔值,显示玩家是否跳跃。我希望布尔值在3秒后变为false,以便玩家再次向下移动。我尝试过使用延迟功能但是没有用。 提前谢谢。
答案 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; =。这样它就会保留变量等等。