2

ゲームのプレイヤーが特定の試合に参加できるようにしたいと考えています。たとえば、PlayerAGKTurnBasedMatchはvia を開始しfindMatchForRequestます。次に、彼は友人に参加してもらいたいと思っていますが、友人がゲームセンターで自分を検索してくれることを期待するのではなく、PlayerAはPlayerBに(たとえば、ソーシャル メディアなどを介して)送信したいと考えていますmatchID。ゲームのリンクをフレンドに送信するためのカスタム URL スキーマ (例: )。mygame://join/**matchID**

ここから、PlayerBは明らかにGKTurnBasedMatch loadMatchWithID... で試合をロードできますが、どうすれば明示的に参加をリクエストできますか?

[GKTurnBasedMatch loadMatchWithID:matchID withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) {
    if(error || !match) {
      [[AMAlertManager sharedManager] showError:i18n(@"errors.invalidInvite")];
    }
    else {
       // Now what?
    }
  }];
4

1 に答える 1

1

私はこれを理解することになりました、そしてそれはかなり簡単です。トリックは、GKTurnBasedMatch をロードしたら、見つかったマッチの参加者 (これらは既にゲームに参加しているプレイヤーです) を調べて、それらからプレイヤー ID の配列を作成することです。を実行するときに、この配列を.playersToInviteプロパティとして使用できますfindMatchForRequest

実際、この配列をhandleInviteFromGameCenterデリゲート メソッドに渡して、既存のコードをゲーム センターの招待用に再利用することもできます。

この関数は、プレイヤーが特定の に参加できるようにしますmatchID:

- (void)handleInviteToMatchID:(NSString*)matchID {
  [GKTurnBasedMatch loadMatchWithID:matchID withCompletionHandler:^(GKTurnBasedMatch *match, NSError *error) {
    if(error || !match) {
      [[AMAlertManager sharedManager] showError:i18n(@"errors.invite.invalid")];
    }
    else if(match.status != GKTurnBasedMatchStatusMatching) {
      [[AMAlertManager sharedManager] showError:i18n(@"errors.invite.notMatching")];
    }
    else {
      NSMutableArray *playersToInvite = [NSMutableArray array];
      for(GKTurnBasedParticipant *player in match.participants) {
        if(player.playerID) {
          [playersToInvite addObject:player.playerID];
        }
      }
      [self handleInviteFromGameCenter:playersToInvite];
    }
  }];
}
于 2013-09-13T15:13:34.900 に答える