5

我正在尝试在 cocos2D 中播放 .gif 动画。为此,我正在使用库 glgif。现在,为了显示动画,我暂停了 Director,添加了一个子视图来显示动画,动画完成后我恢复了 Director。但是,我无法恢复 Director 的状态,它显示为空白。所以我在没有暂停和恢复这个导演的情况下尝试了这个,但它仍然没有工作。我还尝试在动画之前分离导演并在之后将其添加回来,即使这样也没有用。

那么有没有办法暂停/暂停应用程序中的 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];
4

3 回答 3

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

并在您返回时重做初始化并调用 runWithScene。分离/附加舞蹈似乎效果不佳或始终如一。

于 2010-04-25T20:17:06.603 回答
0

不完全确定它在这里是否有帮助,但值得一提的是:CCDirector pause 方法不会完全停止动画,只会减慢它的速度。StopAnimation 方法完全停止它。所以也许 stopAnimation/startAnimation 代替 pause/resume 可以解决这个问题。

于 2012-11-06T10:18:40.903 回答
0

您的一些错误可能是由于附加/分离、显示/隐藏视图造成的。我和我的团队只调用attachInView一次applicationDidFinishLoading,如果我们想改变 Cocos 之上的其他视图,我们使用sendToBackbringToFront调用委托窗口实例。可能值得一试。让我知道这是否有意义,或者如果没有,我可以输入一些示例代码。

于 2010-02-09T22:15:07.320 回答