2009-12-17 71 views
5

我想在cocos2D中播放.gif動畫。爲此,我使用庫glgif。現在,要顯示動畫我暫停導演,添加一個子視圖來顯示動畫,動畫完成後,我正在恢復導演。 但是,我無法恢復主任的狀態,顯示爲空白。 所以我試了一下,沒有暫停和恢復這個導演,它仍然沒有工作。我還試圖在臨時動畫之前將導演分開,並在之後添加它,甚至沒有奏效。Cocos2D主任暫停/簡歷問題

那麼有沒有辦法在應用程序中暫停/暫停Director並正確恢復回來?

謝謝。

代碼示例:

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

您使用的是什麼版本的Cocos2D?你可以發佈代碼示例嗎?你用什麼導演?你用什麼來暫停/恢復它? – nash 2009-12-17 14:30:35

+2

請記住'pause'實際上並不會暫停導演。相反,您要告訴導演您的遊戲處於暫停狀態,而導演仍在繼續運行,但運行速度較低。 「簡歷」告訴導演恢復以完整的目標幀率運行。 – 2009-12-28 22:43:50

回答

0

其可能你的一些錯誤是作爲連接/斷開,顯示/隱藏意見的結果。我和我的團隊只在applicationDidFinishLoading上撥打attachInView一次,如果我們想在Cocos頂部的其他視圖中更改,我們在委託窗口實例上使用sendToBackbringToFront調用。可能值得一試。讓我知道,如果這是有道理的,或者如果沒有,我可以折騰一些示例代碼。

2

如果它是一個簡單的覆蓋,只需暫停並直接進行UIKit調用即可。就像這樣:

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

如果你真的接管整個窗口,然後處置它完全

[[CCDirector sharedDirector] end]; 

和重做intialization並呼籲runWithScene當你回去。分離/附加舞蹈似乎不能很好地或一致地工作。

0

不完全確定它是否可以在這裏幫助,但值得一提的是:CCDirector暫停方法並不能完全阻止動畫,而只是減慢它。 StopAnimation方法完全停止它。所以也許stopAnimation/startAnimation代替暫停/恢復可以解決這個問題。