2012-02-23 21 views
5

Estoy lidiando con una aplicación Cocos2D para iPhone con Game Center Leaderboard. En esta aplicación, el usuario debe dibujar líneas en modo horizontal (el iPhone es horizontal). Sucede entonces que el toque puede comenzar fuera de la pantalla (en el lado izquierdo cerca del micrófono) y continuar dentro de la pantalla. La aplicación comienza a dibujar correctamente tan pronto como el dedo entra en el marco de la pantalla. Sin embargo, si muestro la vista con la tabla de clasificación (que en realidad está representada correctamente) y vuelvo al juego, la aplicación deja de manejar toques que comienzan fuera de la pantalla. De hecho, deja de manejar solo aquellos que comienzan en la parte superior de la pantalla como si hubiera una línea de píxeles en la parte superior que no se consideran.Cocos2D y Leaderboard

empecé a los líderes bordo de esta manera:

- (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]; 
} 
} 

y lo liberan de esta manera:

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

[tempVC release]; 


} 

Respuesta

1

Bueno, el problema suena un poco desagradable, y todo lo que puedo ofrecer es una conjetura a donde el problema podría ser ...

Tengo un juego Cocos2d con tablas de clasificación integrado, y los toques funcionan a la perfección, así que déjame darte los detalles sobre cómo agrego la tabla de clasificación viewControl ler, y es posible que desee probarlo:

Nota:En general, es mejor utilizar UIKit elementos en cocos2d utilizando el RootViewController, agregó en 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; 
+0

que en realidad no tienen la propiedad viewControllery en mi AppDelegate – Sindico

+0

Entonces, está utilizando una versión obsoleta de cocos2d. Según la experiencia personal, las versiones anteriores a 0.99.5 tienen errores y muchas inestabilidades. Actualice a v1.0.1 y existe una gran posibilidad de que su problema se resuelva – Mazyod

+0

De hecho, comencé con una versión anterior a la versión 0.99 pero ahora estoy usando la versión 1.0.1. Sin embargo, el AppDelegate aún no muestra ningún control raízViewController :(? ¿Dónde debo comprobar? – Sindico