iPhone多人游戏代码有效,但iPad不支持。代表问题?

问题描述:

我已经为我的iPhone应用程序封装了多人游戏代码,并开始致力于更新iPad版本的图形。在更新我的所有小精灵之后,我的惊喜让我惊讶不已,我的iPad版本与iPhone完全不同。我使用由自由开发人员和Ray Wenderlich的GCHelper编写的一些自定义代码的组合。到目前为止,一切都很好。对于iphone应用程序,我的游戏玩家发送和接收所有玩家移动。在iPad应用程序中,出于某种原因,场景正在接收数据。iPhone多人游戏代码有效,但iPad不支持。代表问题?

MainMenu.h

@protocol GCHelperDelegate 
- (void)matchStarted; 
- (void)matchEnded; 
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID; 
- (void)inviteReceived; 
@end 


@interface MainMenu: CCLayer <GCHelperDelegate> 
{//some code 
} 

MainMenu.m

- (void) StartMultiplayerGame //button calls up gamecenter matchmaking 
{ 
    NSLog(@"***In StartMultiplayerGame***"); 


    delegate1 = (AppDelegate *) [UIApplication sharedApplication].delegate; 
    [[GCHelper sharedInstance] findMatchWithMinPlayers:2 maxPlayers:4 viewController:delegate1.viewController delegate:self]; 

    boo_multiplayer=true; 
    boo_startgame=true; 

    colorLayer = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 255)]; 
    [colorLayer setOpacity:175]; 
    [self addChild:colorLayer z:2]; 

    return;  
} 

GCHelper.h

#import <Foundation/Foundation.h> 
#import <GameKit/GameKit.h> 
#import "cocos2d.h" 
#import "AppDelegate.h" 


@protocol GCHelperDelegate 
- (void)matchStarted; 
- (void)matchEnded; 
- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID; 
- (void)inviteReceived; 
@end 

@interface GCHelper : NSObject <GKMatchmakerViewControllerDelegate, GKMatchDelegate> { 
    BOOL gameCenterAvailable; 
    BOOL userAuthenticated; 

    bool boo_invite; 

    UIViewController *presentingViewController; 
    GKMatch *match; 
    BOOL matchStarted; 
    __strong id <GCHelperDelegate> delegate; 
    NSMutableDictionary *playersDict; 
    GKInvite *pendingInvite; 
    NSArray *pendingPlayersToInvite; 

    NSMutableArray *playernames; 
    NSMutableArray *playeridentification; 

    NSError *lastError; 

    GKMatchRequest *request; 

    // // AppDelegate *delegate1; 


} 

@property (assign, readonly) BOOL gameCenterAvailable; 
@property (strong) UIViewController *presentingViewController; 
@property (strong) GKMatch *match; 
@property (strong) id <GCHelperDelegate> delegate; 
@property (strong) NSMutableDictionary *playersDict; 
@property (strong) GKInvite *pendingInvite; 
@property (strong) NSArray *pendingPlayersToInvite; 



+ (GCHelper *)sharedInstance; 
- (void)authenticateLocalUser; 
- (void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController *)viewController delegate:(id<GCHelperDelegate>)theDelegate; 

@end 

GCHelper.m

- (void)findMatchWithMinPlayers:(int)minPlayers maxPlayers:(int)maxPlayers viewController:(UIViewController *)viewController delegate:(id<GCHelperDelegate>)theDelegate 
{  
    if (!gameCenterAvailable) return; 

    matchStarted = NO; 
    self.match = nil; 
    self.presentingViewController = viewController; 
    delegate = theDelegate; 

    if (pendingInvite != nil) { 

     [presentingViewController dismissModalViewControllerAnimated:NO]; 
     GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:pendingInvite]; 
     mmvc.matchmakerDelegate = self; 
     [presentingViewController presentModalViewController:mmvc animated:YES]; 

     self.pendingInvite = nil; 
     self.pendingPlayersToInvite = nil; 

    } 
    else { 

     [presentingViewController dismissModalViewControllerAnimated:NO]; 
     request=[[GKMatchRequest alloc] init]; 
     request.minPlayers = minPlayers; 
     request.maxPlayers = maxPlayers; 
     request.playersToInvite = pendingPlayersToInvite; 

     GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithMatchRequest:request];  
     mmvc.matchmakerDelegate = self; 

     [presentingViewController presentModalViewController:mmvc animated:YES]; 

     self.pendingInvite = nil; 
     self.pendingPlayersToInvite = nil; 

    } 

} 

// A peer-to-peer match has been found, the game should start 
- (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)theMatch { 
    [presentingViewController dismissModalViewControllerAnimated:YES]; 
    self.match = theMatch; 
    self.match.delegate = self; 
    currentMatch=match; 

    if (!matchStarted && match.expectedPlayerCount == 0) 
    { 
     NSLog(@"Ready to start match!"); 

     TXGameCenterManager * gameCenterManager = [TXGameCenterManager sharedTXGameCenterManager]; 
     gameCenterManager.multiplayerMatch = match; 
     // The delegate of the match is HelloWorldLayer 

     gameCenterManager.multiplayerMatch.delegate = self; 
     AppDelegate * delegate1 = (AppDelegate *) [UIApplication sharedApplication].delegate; 
     [delegate1.viewController dismissModalViewControllerAnimated:NO]; 

     [self lookupPlayers]; 


    } 
} 

- (void)lookupPlayers 
{ 

    NSLog(@"Looking up %d players...", match.playerIDs.count); 
    [GKPlayer loadPlayersForIdentifiers:match.playerIDs withCompletionHandler:^(NSArray *players, NSError *error) { 

     if (error != nil) { 
      NSLog(@"Error retrieving player info: %@", error.localizedDescription); 
      matchStarted = NO; 
      //[delegate matchEnded]; 
     } 
     else 
     { 
// some code. 
    [[CCDirector sharedDirector] replaceScene:[HelloWorldLayer node]]; 
     } 

我真不明白的是,在iPad模拟器的工作就好了。我的应用程序在这里发生了什么,以及如何强制didReceiveData方法在游戏图层中运行,而不是在我的菜单场景中运行?

这样的白痴。 iPad iOS需要升级到6.0。