2016-05-26 5 views
0

私は2人のターンベースのゲームを作成しました。私は各プレイヤーが自分の番になるのに24時間を要します。彼らがこの制限時間を満たしていない場合、私はゲームを終了したい。ゲームセンターのゲームに時間制限を設定しようとしています

私はNSTimerを使用しようとしましたが、この機能は以下のセレクタとして機能しています。 「セッションが無効な状態であるため、要求された操作を完了できませんでした」:この関数は、コンソールに印刷された本で、実行されたときに

func timerCalled() { 
         for part in currentMatch!.participants! { 
          (part).matchOutcome = .Tied 
         } 
         currentMatch?.endMatchInTurnWithMatchData(data!, scores: nil, achievements: nil, completionHandler: { (error) -> Void in 
          if error != nil { 
           print(error) 
          } 
          self.statusLabel?.text = "Game has ended" 
         }) 
        } 

私のゲームは、しかし、クラッシュします。それは、プレイヤーがターンをした後にタイマーを開始するのでクラッシュするので、 "彼"がゲームを終了したときにもはや自分の番ではありません。時間が過ぎても現在のプレイヤーにゲームを終了させることができたら、それはうまくいくと思いますが、どのように/いつタイマーを始めるのですか?プレイヤー1が自分の番を回ったとき、プレイヤー2でタイマーを開始する必要があります。これはどのように行うのですか?

答えて

0

残念ながら、この記事の執筆時点で、Game Centerはあなたがしたいことをサポートしていません。

あなたが見たように、プレイヤー2がターンを開始してタイマーを開始したり、タイマーが起動したときにアクティブになったりすることができないため、タイマーによるアプローチは有効ではありません。あなたが見たように、プレイヤー1はプレイヤー2の回転を強制終了できません。

endTurnWithNextParticipantsに電話するときにturnTimeoutパラメータを設定することができます。基本的には「このターンで終了し、次のプレイヤーはターンを完了するまでに時間があります。ただし、WWDCビデオの1つにつき、は、ターンの最後のプレイヤーは決してタイムアウトになりません。だから、2人プレイのゲームでは(本当にターンベースの試合では)、最後のプレイヤーは決してタイムアウトしないので常に競争上の優位性を持っています。

回避策として、試合データから前回のプレイヤーの最後のターン日付を取ってタイムアウト値を追加し、現在の時間がそれを超えているかどうかを確認します。そうであれば、私はそこで右折します。しかし、プレイヤー2はゲームを再開するのに数日または数週間待っているかもしれません。または彼らは決して戻ってこないかもしれない。この場合、ターンベースのゲームは孤立していますが、前のプレイヤーは、最終的なプレイヤーが戻ってこない限り、進めることができません。

関連する問題