2010-06-24 8 views
0

J'utilise cocos2d 0.99.4 et Xcode 4.0. donc, j'ai changé mon AppDelegate de cette manière en fonction de la documentation et de l'exemple donnés dans la version 0.99.4.Avertissement de mémoire reçu. Niveau = 2. Data Formatters temporairement indisponible, va ré-essayer après un 'continue'

- (void) applicationDidFinishLaunching:(UIApplication*)application 
{ 
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [CCDirector setDirectorType:kCCDirectorTypeDisplayLink]; 
    CCDirector *director = [CCDirector sharedDirector]; 
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft]; 
    [director setAnimationInterval:1.0/60]; 
    [director setDisplayFPS:NO]; 
    EAGLView *glView = [EAGLView viewWithFrame:[window bounds] 
           pixelFormat:kEAGLColorFormatRGBA8    
           depthFormat:GL_DEPTH_COMPONENT24_OES 
        preserveBackbuffer:NO]; 

    [[CCDirector sharedDirector] setOpenGLView:glView]; 

    [window addSubview:glView]; 
    [window makeKeyAndVisible]; 

    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; 
    gameLevel = [[NSUserDefaults standardUserDefaults] integerForKey:@"gameLevel"] ; 
    gameLevel = 1; 

    CCScene *scene = [CCScene node]; 
    CCLayer *layer = [GamewinScreen node]; 
    [scene addChild :layer]; 

    [[CCDirector sharedDirector] runWithScene: scene]; 

} 

// La méthode test1 est également dans la classe Delegate de l'application.

-(void)test1 
{ 

    [[CCDirector sharedDirector] end]; 
    [[CCDirector sharedDirector] setOpenGLView:[[window subviews] objectAtIndex:0]];  

    CCScene *Scene = [CCScene node]; 
    CCLayer *Layer = [OpeningScreen node]; 

    [Scene addChild:Layer]; 

    [[CCDirector sharedDirector] runWithScene: Scene]; 
} 

En GameWinScreen J'ai un @selector sélecteur (goToFirstScreen),

-(void)goToFirstScreen:(id)sender 
{ 
    [MY_DELEGATE performSelector:@selector(test1) withObject:nil afterDelay:1.0]; 
} 

Après avoir joué le jeu pendant 50 minutes et plus je suis obtenir

Received memory warning. Level=1 

pour plus de 10 fois puis
Avertissement de mémoire reçu. Niveau = 2

et l'application plante. donnant le message suivant

Program received signal: “0”. 
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib") 

alt text http://www.freeimagehosting.net/uploads/52ac11fe93.png

alt text http://www.freeimagehosting.net/uploads/619333a82f.png

Répondre

1

C'est cocos2d vous dire que vous faites quelque chose de mal. Vous appelez setDirectorType sur le directeur au goToFirstScreen, mais la deuxième fois que vous l'appelez, il y a déjà un directeur. Je ne sais pas pourquoi vous redémarrez le réalisateur. Pourquoi ne pas remplacer simplement la scène:

-(void)goToFirstScreen:(id)sender 
{ 
    CCScene *Scene = [CCScene node]; 
    CCLayer *Layer = [OpeningScreen node]; 
    [Scene addChild:Layer]; 
    [[CCDirector sharedDirector] replaceScene:Scene]; 
} 
+0

je REPLACE première scène, mais quand je jouais le jeu pendant plus de 50 minutes en continu, il donnait la mémoire Niveau d'avertissement 1 et mémoire Avertissement de niveau 2, puis écraser. Donc, j'ai pensé à mettre fin au CCDirector et redémarrer à nouveau. Merci. –

+0

Vous perdez de la mémoire, redémarrer le réalisateur n'aidera pas plus que le remplacement de la scène car votre calque 'OpeningScreen' est le seul de vos objets qu'il retient. Essayez d'utiliser l'instrument Leaks pour savoir quelle mémoire vous fuyez. –

+0

J'ai vérifié avec l'outil de fuites. Il montre des fuites. Les fuites sont dans CA :: DisplayLink :: dispatch. quand j'ai cliqué dessus, il ne montre pas le programme. J'ai téléchargé les images de fuites. Pouvez-vous les regarder s'il vous plaît. Merci. –

Questions connexes