如何在Swift游戏中制作前景和背景2-3小时计时器?

时间:2016-11-01 11:47:32

标签: ios swift timer nstimer

我有一个游戏,我在玩家输了时添加一个计时器,现在是3个小时。当时间过去了,玩家可以获得我游戏的15个硬币。

目前,我正在使用NSTimer。问题是每当我将游戏置于后台模式时,计时器就会停止,因为我在文档中看到了。所以时间只适用于游戏时间而不是总是。

我怎样才能做到这一点?当计时器结束时,我甚至会向用户发送通知,这样用户就可以进入我的游戏并免费获取硬币。

这是我到目前为止所拥有的:

var coinCountdown = 10800 // 3hr = 10800
var coinCurrentTimer = NSTimer.init()
var coinCountdownLabel = SKLabelNode()

然后在我的SKScene的init中,我做了:

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")
        }
    }

任何提示都将非常感激。

1 个答案:

答案 0 :(得分:0)

我还没有做过这样的事情,但我知道如何做到这一点。

当&#39;计时器&#39;应该开始你可以安排一个本地静默通知,提醒应用程序时间已经过去或事件已被触发。

当应用程序收到此预定通知时,它可以运行一些基本检查,以查看自安排通知以来是否发生任何事情可能会取消它,如果没有,那么它可能会触发立即本地通知以提醒用户该事件。

请参阅Local and remote notifications的文档,它甚至引用了一个事件,其中&#34; TIMER_EXPIRED&#34;这与我上面的建议相似。

编辑:查看文档,看起来您可以安排静默通知,但从理论上讲,这仍然可以适用于您的情况。