2009-12-17 3 views
5

J'essaye de jouer une animation .gif dans cocos2D. Pour cela j'utilise la librairie glgif. Maintenant, pour afficher l'animation, je fais une pause dans le Director, j'ajoute une sous-vue pour montrer l'animation et une fois l'animation terminée, je reprends le Director. Cependant, je ne suis pas en mesure de reprendre l'état du directeur et il est vide. J'ai donc essayé ceci sans mettre en pause et reprendre ce réalisateur et cela ne fonctionnait toujours pas. J'ai également essayé de détacher le réalisateur avant l'animation et de le rajouter par la suite et même cela n'a pas fonctionné.Cocos2D Director Pause/Reprise Numéro

Y at-il un moyen de mettre en pause/suspendre le directeur dans l'application et de restaurer correctement est de retour?

Merci.

Exemple de code:

[[Director sharedDirector] pause]; 
[[Director sharedDirector] detach]; 
AppDelegate *del = [[UIApplication sharedApplication] delegate]; 
[del.window addSubview:del.viewController.view]; 
[del.window makeKeyAndVisible]; // this is code to call glgif class and start anim. 
//code to resume the director 
AppDelegate *del = [[UIApplication sharedApplication] delegate]; 
[[Director sharedDirector] resume]; 
[[Director sharedDirector] attachInView:del.window]; 
MScene *m = [MScene node]; 
[[Director sharedDirector] replaceScene:m]; 
+0

Quelle version de Cocos2D utilisez-vous? Pouvez-vous poster un échantillon de code? Quel directeur utilisez-vous? Qu'est-ce que vous utilisez pour mettre en pause/le reprendre? – nash

+2

Gardez à l'esprit 'pause' ne met pas réellement le directeur en pause. Au lieu de cela, vous dites au directeur que votre jeu est en pause et que le directeur répond en continuant à fonctionner, mais à un taux de framerate (beaucoup) plus bas. 'resume' indique au directeur de reprendre l'exécution au taux de framerate cible complet. –

Répondre

0

Il est possible certaines de vos erreurs sont à la suite d'attacher/détacher, montrant/vues cacher. Moi et mon équipe appelons seulement attachInView une fois sur applicationDidFinishLoading et si nous voulons changer dans d'autres vues au-dessus de Cocos nous utilisons les appels sendToBack ou bringToFront sur l'instance de la fenêtre de délégué. Cela pourrait valoir un coup de feu. Faites-moi savoir si cela a du sens ou si je ne peux pas jeter dans un exemple de code.

2

S'il s'agit d'une superposition simple, faites simplement une pause et effectuez vos appels UIKit directement. Comme ceci:

- (void)playerChanged 
{ 
    [[CCDirector sharedDirector] pause]; 
    UIAlertView *alert = [[[UIAlertView alloc] 
     initWithTitle:NSLocalizedString(@"CHANGEPLAYER", nil) 
     message:nil 
     delegate:self 
     cancelButtonTitle:nil 
     otherButtonTitles:NSLocalizedString(@"OK", nil), 
     nil 
    ] autorelease]; 
    [alert show]; 
} 

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    (void)alertView; 
    (void)buttonIndex; 

    [[CCDirector sharedDirector] resume]; 
} 

Si vous prenez vraiment sur toute la fenêtre, puis éliminer complètement

[[CCDirector sharedDirector] end]; 

et refaire votre appel et runWithScene initialisation quand vous revenez. La danse détacher/attacher ne semble pas fonctionner correctement ou régulièrement.

0

Pas complètement sûr si cela pourrait aider ici, mais il vaut la peine de mentionner: la méthode de pause de CCDirector n'arrête pas complètement l'animation mais la ralentit simplement. La méthode StopAnimation l'arrête complètement. Alors peut-être stopAnimation/startAnimation à la place pause/reprise pourrait résoudre ce problème.