我正在尝试创建一个游戏,用户必须通过平台中的间隙(称为倒下)来导航球。当分数达到某一点时,移动平台以更快的速度创建。为此,我编写了以下代码:
switch String(level) {
case "1" :
beginLevel.invalidate()
level1 = NSTimer.scheduledTimerWithTimeInterval( 0.9 , target: self, selector: Selector("platformCreation"), userInfo: nil , repeats: true)
case "2" :
level1.invalidate()
level2 = NSTimer.scheduledTimerWithTimeInterval( 0.8 , target: self, selector: Selector("platformCreation"), userInfo: nil , repeats: true)
case "3" :
level2.invalidate()
level3 = NSTimer.scheduledTimerWithTimeInterval( 0.7 , target: self, selector: Selector("platformCreation"), userInfo: nil , repeats: true)
case "4" :
level3.invalidate()
level4 = NSTimer.scheduledTimerWithTimeInterval( 0.6 , target: self, selector: Selector("platformCreation"), userInfo: nil , repeats: true)
default :
print("invalid level")
}
每当游戏重新启动时都会运行beginLevel,级别只能是1到4。
我遇到的问题是,一旦前一个NSTimer无效,在新的触发器被触发之前会有一个没有平台的延迟。这些延迟使得游戏过于简单,老实说它看起来也很难看!我想要实现的是平台的不断流动,平台之间没有巨大的差距。您可以为此问题提供的任何内容都非常感谢。
答案 0 :(得分:0)
一种可能的解决方案是在适当的延迟后使旧计时器无效。
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
self.level1.invalidate()
}
答案 1 :(得分:0)
一种解决方案是在初始化定时器后立即使用call fire()方法,如下所示
level3 = NSTimer.scheduledTimerWithTimeInterval( 0.7 , target: self, selector: Selector("platformCreation"), userInfo: nil , repeats: true);
level.fire()