2009-12-17 9 views
5

Cocos2D'de bir .gif animasyonu oynatmaya çalışıyorum. Bunun için kütüphane glgif kullanıyorum. Şimdi, animasyonu görüntülemek için Direktörü duraklatıyorum, animasyonu göstermek için bir alt görünüm ekliyorum ve animasyon tamamlandıktan sonra Direktörü sürdürüyorum. Ancak, Direktörün durumunu sürdüremiyorum ve boş gösteriliyor. Bu yüzden bu Direktörü duraklatmadan ve devam ettirmeden denedim ve hala işe yaramadı. Animasyondan önce yönetmenin kopmasını ve daha sonra tekrar eklemeyi ve hatta çalışmadığını da denedim.Cocos2D Director Pause/Resume Sorun

Bu nedenle, uygulamadaki Yönetmenin duraklatılması/askıya alınması ve düzgün bir şekilde geri yüklenmesinin bir yolu var mı?

Teşekkürler.

kod örneği:

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

Hangi Cocos2D sürümünü kullanıyorsunuz? Bir kod örneği gönderir misin? Hangi yönetmeni kullanıyorsunuz? Onu duraklatmak/sürdürmek için ne kullanıyorsunuz? – nash

+2

Unutmayın ki 'duraklatma' aslında Direktörü durdurmaz. Bunun yerine, Direktör'e oyununuzun duraklatılmış bir durumda olduğunu söylüyorsunuz ve Müdür hala koşarak tepki veriyor, ancak (çok) daha düşük bir kare hızında. "devam", Direktöre tam hedef çerçeve hızında çalışmaya devam etmesini söyler. –

cevap

0

Onun olası hata daha bazılarıdır görüşlerini gizleme/gösterme koparak/eklemek sonucunda. Ben ve ekibim, attachInView'u bir kez applicationDidFinishLoading numaralı telefondan arayarak ve Cocos'un üstündeki diğer görünümlerde değiştirmek istiyorsak, sendToBack veya bringToFront delege penceresi örneğini çağırıyoruz. Denemeye değebilir. Eğer bu mantıklıysa veya bazı örnek kodlarda atabilirsem haberim olsun.

2

Bu basit bir yer paylaşımıysa, doğrudan UIKit çağrılarınızı duraklatın ve yapın. Şunun gibi:

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

Gerçekten de pencerelerin alıyoruz, o zaman tamamen bunun

[[CCDirector sharedDirector] end]; 

elden ve intialization yinelemek ve geri giderken runWithScene diyoruz. Çıkar/takıl dansı iyi ya da tutarlı şekilde çalışmıyor gibi gözüküyor.

0

Burada yardımcı olabileceğinden tam olarak emin değilsiniz, ancak şu noktaya değinmekte fayda var: CCDirector duraklatma yöntemi, animasyonu tamamen durdurmaz, sadece yavaşlatır. StopAnimation yöntemi tamamen durdurur. Bu yüzden belki duraklama/devam etmek bu sorunu çözebilirse, StopAnimation/startAnimation olabilir.