2009-12-17 2 views
5

Sto provando a riprodurre un'animazione .gif in cocos2D. Per questo sto usando la libreria glgif. Ora, per visualizzare l'animazione sto facendo una pausa al regista, aggiungendo una sottoview per mostrare l'animazione e dopo che l'animazione è terminata riprendo il regista. Tuttavia, non è possibile riprendere lo stato di Director e viene visualizzato vuoto. Così ho provato questo senza fermarmi e riprendere questo direttore e ancora non ha funzionato. Ho anche provato a staccare il regista prima dell'animazione e ad aggiungerlo dopo e anche quello non ha funzionato.Cocos2D Director Pausa/Ripresa numero

Quindi c'è un modo per mettere in pausa/sospendere il Director nell'applicazione e il ripristino corretto è tornato?

Grazie.

codice di esempio:

[[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

Quale versione di Cocos2D stai usando? Puoi pubblicare un esempio di codice? Che regista usi? Cosa usi per metterlo in pausa/riprenderlo? – nash

+2

Tieni presente che 'pause' in realtà non mette in pausa il regista. Invece stai dicendo al regista che il tuo gioco è in uno stato di pausa e il regista risponde funzionando ancora, ma a un framerate (molto) più basso. 'resume' dice al direttore di riprendere a correre al framerate di destinazione completo. –

risposta

0

sua possibile alcuni dei vostri errori sono a causa di attaccare/staccare, visualizzare/nascondere viste. Io e il mio team chiamiamo solo attachInView una volta su applicationDidFinishLoading e se vogliamo cambiare in altre viste sopra Cocos usiamo le chiamate sendToBack o sull'istanza della finestra delegato. Potrebbe valere la pena di un colpo. Fammi sapere se questo ha un senso o se non posso lanciare qualche codice di esempio.

2

Se si tratta di una semplice sovrapposizione, è sufficiente mettere in pausa e effettuare direttamente le chiamate UIKit. Come questo:

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

Se sei veramente presa in consegna l'intera finestra, per poi cederlo completamente

[[CCDirector sharedDirector] end]; 

e ripetere l'intialization e chiamare runWithScene quando si torna. Il ballo distaccare/attaccare non sembra funzionare bene o in modo coerente.

0

Non completamente sicuro se potrebbe aiutare qui, ma vale la pena menzionare: il metodo di pausa CCDirector non arresta completamente l'animazione ma lo rallenta. Il metodo StopAnimation lo ferma completamente. Quindi forse stopAnimation/startAnimation invece mettere in pausa/riprendere potrebbe risolvere questo problema.