Sam이 말한 것처럼이 작업을 수행하는 새로운 방법은 GKLocalPlayerListener 프로토콜을 사용하는 것입니다. 접근법은 지금 반대입니다. 과거에는 앱의 일부로 다른 플레이어에게 초대장을 보냈습니다. 다른 부분은 다른 플레이어의 초대를 청취하고 이에 응답했습니다. 이제는 matchMakerViewController 또는 게임 센터를 사용하여 초대장을 발행하지만 (이전과 같이) 이제 초대장을 수락합니다. 게임 센터에서 didFindMatch를 호출하면 모든 것이 시작됩니다. 초대장을받은 경우 게임 센터에서 게임을 시작한 다음 didFindMatch를 호출하여 게임을 시작합니다. 내 .H 파일에서 GKLocalPlayerListener 프로토콜
: 로컬 플레이어가 인증 된 후 내 authenticateHandler 블록에서하는 .m 파일에
@interface MNFStartupViewController : UIViewController<ADBannerViewDelegate, GKMatchmakerViewControllerDelegate, GKMatchDelegate, GKLocalPlayerListener, UIAlertViewDelegate>
:
[[GKLocalPlayer localPlayer] registerListener:self];
이
내 코드입니다
다음 초대 수락을 수신 대기하는 방법 :
-(void)player:(GKPlayer *)player didAcceptInvite:(GKInvite *)invite{
//Called when another player accepts a match invite from the local player.
NSLog(@"didAcceptInvite was called: Player: %@ accepted our invitation", player);
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:invite];
mmvc.matchmakerDelegate = self;
[self presentViewController:mmvc animated:YES completion:nil];}
이제 게임 센터에서 선택한 게임 세트를 사용하여 게임 센터에서 게임을 시작하는 방법입니다. Game Center에서 게임을 시작할 수 없기 때문에 동시에 Xcode에서 게임을 시작할 수 없기 때문에 디버깅하기가 어렵습니다 (어쨌든 그렇게 생각하지 않습니다!) 따라서 디버깅 할 수있는 AlertView가 삭제 될 수 있습니다. 마지막으로이 모든 플레이어가 연결되어있을 때가는 경기를 설정하기 위해 게임 센터에 의해 호출 방법은 갈 준비
-(IBAction)setupMatch:(id)sender{
GKMatchmakerViewController *matchViewController = [[GKMatchmakerViewController alloc] initWithMatchRequest:matchRequest];
matchViewController.matchmakerDelegate = self;
[self presentViewController:matchViewController animated:YES completion:nil];}
:
-(void)player:(GKPlayer *)player didRequestMatchWithPlayers:(NSArray *)playerIDsToInvite{
//Called when the local player starts a match with another player from Game Center
//Start of debugging logging and alerting
NSLog(@"In didRequestMatchWithPlayers for players: %@", playerIDsToInvite);
NSString *logString = [[NSString alloc] initWithFormat:@"didrequestMatchWithPlayers was called with player IDs: %@", playerIDsToInvite];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Logging Alert" message:logString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//End of debugging logging and alerting
//Create a match for the chosen players
GKMatchRequest *match = [[GKMatchRequest alloc]init];
match.playersToInvite = playerIDsToInvite;
//Create a matchmaking viewcontroller for that match
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc]initWithMatchRequest:match];
mmvc.matchmakerDelegate = self;
[self presentViewController:mmvc animated:YES completion:nil];}
이
전체 중매 과정을 킥오프하는 방법입니다 . currentPlayer, currentMatch 및 hostingPlayer는 확실한 용도로 사용되는 자체 속성입니다.
-(void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match{
//Called when GameCenter completes the auto matchmaking process
match.delegate = (id)self;
[self setCurrentMatch:match];
[self setCurrentPlayers:match.playerIDs];
NSLog(@"Match was found with players: %@, time to get on with the game.", self.currentPlayers);
//Use the built in features to decide which device should be the server.
self.hostingPlayer = [self chooseHostingPlayerIDfromPlayerIDs:self.currentPlayers];
[self dismissViewControllerAnimated:YES completion:nil];}
희망이 있습니다.