ios - 如何在 Swift 游戏中制作前台和后台 2-3 小时计时器?

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

任何提示将不胜感激。

最佳答案

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

当“计时器”应该启动时,您可以安排一个本地静默通知,以提醒应用程序时间已过或事件已触发。

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

请参阅 Local and remote notifications 的文档它甚至引用了“TIMER_EXPIRED”事件,这与我上面的建议类似。

编辑:查看文档,您似乎无法安排静默通知,但理论上这仍然适用于您的情况。

关于ios - 如何在 Swift 游戏中制作前台和后台 2-3 小时计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40359444/

相关文章:

ios - 将 JSON 解析为 UILabel 时出现空数组错误

ios - Swift 中带有部分和自定义对象的 UITableView

javascript - 通过获取父级的 "this"属性来推送具有删除自身的对象的数组

python: 慢 timeit() 函数

c# - 如果您在应用程序中使用 System.Timers.Timer,是否有必要处理它?

ios - 在 Xcode 项目中组织文件并以编程方式获取文件夹列表

ios - iPhone map 路线问题

ios - 如何使用此代码在 tableview 中使用搜索栏?

ios - 打开 alertviewcontroller 时显示新的 VC

ios - Swift 4 如何在 ViewControllers 和 ContainerViews 之间传递数据?