私のプロジェクトにはオンラインプレイが必要です。
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 2;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[presentingViewController presentModalViewController:mmvc animated:YES];
上記のコードは GameCenter ビューを作成しました。「今すぐプレイ」という名前のボタンを押すと、「GKMatchDelegate の [- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state]」が呼び出されます。 、その作品は大丈夫です。
しかし今、私は「プログラムによる一致の検索」を使用する必要があり、公式ビューなしで直接一致を見つけます。
[[GKMatchmaker sharedMatchmaker]findMatchForRequest:request withCompletionHandler:^(GKMatch *hasmatch, NSError *error) {
if(error)
{
NSLog(@"has error match!!!");
}
else if(hasmatch)
{
NSLog(@"has match!!!");//in test we really find the match.
[presentingViewController dismissModalViewControllerAnimated:YES];
self.match = hasmatch;
self.match.delegate = self;
}
}];
「GKMatchDelegate の [- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state]」が機能しなくなりました。
オンライン対戦を始めるにはどうすればいいですか?
- (void)match:(GKMatch *)theMatch player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state {
if (self.match != theMatch) return;
switch (state) {
case GKPlayerStateConnected:
// handle a new player connection.
NSLog(@"Player connected!");
if (!matchStarted && theMatch.expectedPlayerCount == 0) {
NSLog(@"Ready to start match!");
[self lookupPlayers];//i start game here
}
break;
case GKPlayerStateDisconnected:
// a player just disconnected.
NSLog(@"Player disconnected!");
matchStarted = NO;
[delegate matchEnded];
break;
}
}