2016-11-01 14 views
0

私は、プレイヤーが失ったときにタイマーを追加しています。現在は3時間です。時間がなくなると、プレイヤーは自分のゲームの15コインを無料で得ることができます。スウィフトゲームでフォアグラウンドとバックグラウンドの2〜3時間タイマーを作成するにはどうすればよいですか?

今のところ、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") 
     } 
    } 

どれでもヒントは非常に高く評価されます。

+0

この機能は、Timer..Evenを使用して実装することはできません。キャンディクラッシュは、現在の時間に時間間隔を追加し、デバイス時間がtimeに達したかどうかを確認する機能を実装しました。 :) –

+0

ああ:(お返事いただきありがとうございます) – msqar

答えて

0

私はまだ実際にこのようなことはしていませんが、どうやったらそれができるか考えています。

「タイマー」を開始する予定がある場合、時間が経過したことやイベントが発生したことをアプリに警告するローカルのサイレント通知をスケジュールできます。

アプリがこのスケジュール通知を受け取ると、通知がスケジュールされてからキャンセルされる可能性があるかどうかを確認するための基本的なチェックが行われる可能性があります。イベント。

Local and remote notificationsのドキュメントを参照してください。これは、上の私の提案と同様の「TIMER_EXPIRED」イベントを参照しています。

編集:ドキュメントを見れば、サイレント通知をスケジュールできるようには見えませんが、理論的にはこれはあなたのケースではまだ有効です。

+0

ユーザーがデバイス時間を変更した場合、それは機能しますか? –

+0

正直なことは分かりません。イベントは1分で幸運にも、それはオペアンプが尋ねた質問ではありませんでしたが、これはもう一つの質問であり、ここでは広すぎると言いたいと思います。ユーザーが時間を制御できない場合 – Scriptable

+0

はい、この機能の実装方法についても混乱しています。私は質問にコメントを残しました。 –

関連する問題