我有一个游戏,当玩家输了的时候我会添加一个计时器,现在是3个小时。当时间到期时,玩家可以免费获得我游戏中的15枚硬币。
现在,我使用的是NSTimer。问题是,每当我将游戏置于后台模式时,计时器会随着我在文档中的阅读而停止。因此,计时将仅针对游戏播放时间运行,而不是始终运行。
我如何才能做到这一点?我甚至会在计时器结束时向用户发送通知,这样用户就可以进入我的游戏并免费获取硬币。
这是我到目前为止所知道的:
var coinCountdown = 10800 // 3hr = 10800
var coinCurrentTimer = NSTimer.init()
var coinCountdownLabel = SKLabelNode()然后,在我的SKScene的初始化中,我这样做:
self.coinCurrentTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(GameScene.updateCoinCountdown), userInfo: nil, repeats: true)这是updateCoinCountdown方法:
func updateCoinCountdown() {
if(self.coinCountdown > 0){
var hour = String(self.coinCountdown / 3600)
var minutes = String((self.coinCountdown % 3600) / 60)
var seconds = String((self.coinCountdown % 3600) % 60)
if Int(hour) < 10 {
hour = "0" + hour
}
if Int(minutes) < 10 {
minutes = "0" + minutes
}
if Int(seconds) < 10 {
seconds = "0" + seconds
}
self.coinCountdownLabel.text = hour + ":" + minutes + ":" + seconds
self.coinCountdown = self.coinCountdown - 1
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.valueForKey("coinCountdown") != nil {
defaults.setValue(self.coinCountdown, forKey: "coinCountdown")
}
}else{
print("Done! Send notification and show get coin button")
}
}如有任何提示,将不胜感激。
发布于 2016-11-01 20:40:24
我实际上还没有做过这样的事情,但我有一个想法可以做到。
当“定时器”应该启动时,你可以安排一个本地静默通知,提醒应用程序时间已过或事件已被触发。
当应用程序接收到这个预定的通知时,它可以运行一些基本的检查,看看自预定的通知以来是否发生了任何事情,这可能会取消它,如果没有,它可以触发一个即时的本地通知,以提醒用户该事件。
请参阅Local and remote notifications的文档,它甚至引用了一个事件,其中的"TIMER_EXPIRED“类似于我上面的建议。
编辑:查看文档,看起来你不能安排一个无声的通知,但理论上这仍然适用于你的情况。
https://stackoverflow.com/questions/40359444
复制相似问题