5 votes

Cocos2D & Leaderboard

J'ai affaire à une application Cocos2D pour iPhone avec le Game Center Leaderboard. Dans cette application, l'utilisateur doit tracer des lignes en mode paysage (l'iPhone est horizontal). Il arrive alors que le toucher commence à l'extérieur de l'écran (sur le côté gauche, près du microphone) et se poursuive à l'intérieur de l'écran. L'application commence à dessiner correctement dès que le doigt entre dans le cadre de l'écran. Cependant, si j'affiche la vue avec le classement (qui est en fait correctement représenté) et que je reviens au jeu, l'application cesse de gérer les touchers qui commencent à l'extérieur de l'écran. En fait, elle ne gère plus que ceux qui commencent en haut de l'écran, comme s'il y avait une ligne de pixels en haut qui n'était pas prise en compte.

J'ai commencé le tableau de bord de cette manière :

- (void) showLeaderboard
{
   GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
if (leaderboardController != nil){
    tempVC=[[UIViewController alloc] init] ;
    leaderboardController.leaderboardDelegate = self;
    [[[CCDirector sharedDirector] openGLView] addSubview:tempVC.view];

    [tempVC presentModalViewController:leaderboardController animated:YES];
    tempVC.view.transform = CGAffineTransformMakeRotation(CC_DEGREES_TO_RADIANS(0.0f));
    tempVC.view.bounds = CGRectMake(0, 0, 480, 320);
    tempVC.view.center = CGPointMake(240, 160);

    [leaderboardController release];
}
}

et le libérer de cette manière :

-(void) leaderboardViewControllerDidFinish: (GKLeaderboardViewController *) viewController{
[tempVC dismissModalViewControllerAnimated:YES];
[tempVC.view.superview removeFromSuperview];
[tempVC.view removeFromSuperview];

[tempVC release];

}

1voto

Mazyod Points 6072

Eh bien, votre problème semble un peu désagréable, et tout ce que je peux vous proposer, c'est une hypothèse sur l'origine du problème

J'ai un jeu Cocos2d avec des Leaderboards intégrés, et les touches fonctionnent parfaitement, alors laissez-moi vous donner les détails sur la façon dont j'ai ajouté le viewController du leaderboard, et vous voudrez peut-être l'essayer :

Nota: Il est généralement préférable d'utiliser des éléments UIKit dans cocos2d en utilisant le RootViewController, ajouté dans la v0.99.5.

//Action method invoked upon pressing the "Show LeaderBoards button"
-(void)showLeaderboardButtonClicked {
    [gameCenterHandler showLeaderboard];
}

//Inside the GameCenter Handler:
-(void) showLeaderboard {
    if (isGameCenterAvailable == NO) {
        return;
    } else if (![[GKLocalPlayer localPlayer] isAuthenticated]) {
        [self authenticateLocalPlayer];
    } else {
        GKLeaderboardViewController* leaderboardVC = [[[GKLeaderboardViewController alloc] init] autorelease];
        if (leaderboardVC != nil) {
            leaderboardVC.leaderboardDelegate = self;
            [rootVC presentModalViewController:leaderboardVC animated:YES];
        }
}

-(void) leaderboardViewControllerDidFinish:(GKLeaderboardViewController*)viewController {
    [rootVC dismissModalViewControllerAnimated:YES];
}

Dónde rootVC est en AppDelegate.h :

    RootViewController  *viewController;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X