如何停止所有动画并在屏幕上显示一系列精灵?

时间:2013-02-20 07:06:42

标签: animation cocos2d-iphone

我正在为我的cocos2d(-iphone v2.0)平台游戏/正在运行的游戏实现教程模式 - 当用户处于教程模式时,我需要暂停游戏并提供说明。在游戏中,有一点我需要停止所有动画并按顺序向用户提供一些输入,相互覆盖(相隔1秒钟)。

在我要求的点上,在我的游戏图层中,我调用[[CCDirector sharedDirector]stopAnimation]来停止所有动画。现在,我想调用两个连续的呼叫,间隔1秒。因为动画停止,我没有得到任何更新调用。所以,我尝试使用NSTimer,如下所示:

-(void)update
{
  //...
  [[CCDirector sharedDirector]stopAnimation];
  //...
  [self showFirstTutorialInstruction];
  NSTimer *timer = [[NSTimer scheduledTimerWithTimeInterval:1.0
  target:self
  selector:@selector(showNextTutorialInstruction)
  userInfo:nil
  repeats:NO]retain];
  //...
}

-(void)ccTouchBegan(...)
{
  //...
  [CCDirector sharedDirector]startAnimation];
  //...
}

现在动画停止,定时器函数被调用,但是在我重新开始动画之后,选择器中的第二条指令才会显示在显示区域中。如何在showNextTutorialInstruction中获取第二条指令,以便在调用后立即显示?我试图强制访问图层,但不起作用。

1 个答案:

答案 0 :(得分:0)

如何编写更新方法来提供动作/动画?你可以做的一件事是使用stopAnimation而不是stopAnimation。例如,我在测试项目中尝试了这个

-(void)startPause {
    if(!isPaused) {
        isPaused = YES;
        [[CCDirector sharedDirector] pause];
        [self performSelector:@selector(addLabel) withObject:nil afterDelay:2.0];
    } else {
        isPaused = NO;
        [self removeChild:addLabel cleanup:YES];
        [[CCDirector sharedDirector] resume];
    }
}

-(void)addLabel {
    addLabel = [CCLabelTTF labelWithString:@"TEST" fontName:@"Arial" fontSize:20];
    [self addChild:addLabel];
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    addLabel.position = ccp(winSize.width/2, winSize.height/2);
}

[[CCDirector sharedDirector] pause];在cocos2d文档中概述为“暂停正在运行的场景。正在运行的场景将绘制但所有预定的计时器将暂停,暂停时,绘制速率将为4 FPS以减少CPU消耗”

我使用的isPaused是一个BOOL,在我的更新方法中,一开始我有一行

if (isPaused) { return; }

但回头看它现在根本不需要它。由于我的performSelector中的计时器在导演暂停后添加,它将按计划运行。这样可以让您获得所需的添加所需内容的结果。