iOS Game Kit Turn Based Match Programatic Rematch

不想你离开。 提交于 2019-12-07 01:53:55

问题


I have a 2-player, iOS turn-based game that uses the game center and GKTurnbasedMatch.

Is there a way to programmatically rematch an opponent after a match has finished?

I would like to give the players one-button access to starting a new match with each other.

If there is not a one button approach, what are some potential alternatives?


回答1:


Indeed it appears a full programmatic solution is being ignored by Game Center. A pain, no doubt. Try the following in your @selector(doRematchTap)... or some equivalent:

    NSMutableArray *playerIds = [NSMutableArray array];
    GKTurnBasedParticipant *otherPlayer = /* Get the other player some way */;
    GKTurnBasedParticipant *myParticipant = /* Get yourself a very similar way*/;

    [playerIds addObject:myParticipant.playerID];
    if (otherPlayer.playerID) {
        [playerIds addObject:otherPlayer.playerID];
    }// sanity check

    GKMatchRequest *request = [[GKMatchRequest alloc] init];
    request.playersToInvite = playerIds;
    request.minPlayers = 2;
    request.maxPlayers = 2;

    GKTurnBasedMatchmakerViewController *tbmcv = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request];
    tbmcv.showExistingMatches = NO;
    tbmcv.turnBasedMatchmakerDelegate = /* Your normal delegate for the callbacks */;

    [self presentViewController:tbmcv
                       animated:YES
                     completion:^{
                      }];

Important to note the showExistingMatches = NO, which will jump the view controller right into matchmaking mode with the correct user pre-selected (it seems), and not show the user's existing matches.




回答2:


I don't have the whole solution, but a idea for you:

Every Player has a unique player-ID, that you can get, if you store it away after a

didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

Now you can start programmatically a new match and invite this player. He will be asked if he wants a rematch and then you can play again.

I know this is not much of code or concrete advise, but maybe it's enough information to find the rest in the GameKit Class Reference.

I wonder if you can work it out, tell me if you did and good luck!

Edit:

I have searched in the references and found this:

- (void) loadPlayerData: (NSArray *) identifiers

I didn't tried it out myself, but you should get the player this way again, if you store his identifier in an array and pass it to this function.

I hope they bring some changes in iOS6 for Game Center, that you can make your matches programmatically in your own way...



来源:https://stackoverflow.com/questions/12148430/ios-game-kit-turn-based-match-programatic-rematch

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!