设置精灵显示持续时间

时间:2013-04-07 17:47:33

标签: animation cocos2d-iphone ccaction

我的代码中的delayperunit属性会在精灵更改之前将精灵保持在屏幕上2.5秒。我真正想要做的是显示精灵0.5秒,以便在下一个显示另一个0.5秒之前有2.0秒的中断(没有动画显示),依此类推。我怎样才能做到这一点?

  // Create the intro image
CGSize screenSize = [CCDirector sharedDirector].winSize;
CCSprite *introImage = [CCSprite spriteWithFile:@"intro1.png"];
[introImage setPosition:ccp(screenSize.width/2, screenSize.height/2)];
[self addChild:introImage];

// Create the intro animation, and load it from intro1 to intro7.png
CCAnimation *introAnimation = [CCAnimation animation];
[introAnimation delayPerUnit:2.5f];
for (int frameNumber=0; frameNumber < 8; frameNumber++) {
    CCLOG(@"Adding image intro%d.png to the introAnimation.",frameNumber);
    [introAnimation addSpriteFrameWithFilename:
     [NSString stringWithFormat:@"intro%d.png",frameNumber]];
}

2 个答案:

答案 0 :(得分:1)

我不认为你可以用CCAnimation做到这一点。您可以将其嵌入到类中(如果这将是一个重复出现的主题),或者在显示这些框架的模块中执行此操作:

在.h,一些ivars;

  NSUInteger _currentFrame;
  NSUInteger _maxFrames;

在.m,你准备好开始了:

 _currentFrame=1;
 _maxFrames = 8;
 [self scheduleOnce:@selector(flashFrame) delay:0.];

-(void) flashFrame: {

    NSString *spriteName = [NSString stringWithFormat:@"intro%d.png",_currentFrame];
    CCSprite *sprite = [CCSprite spriteWithFile:spriteName];
    CGSize screenSize = [CCDirector sharedDirector].winSize;
    sprite.position=ccp(screenSize.width/2, screenSize.height/2);
    id wait  = [CCDelayTime actionWithDuration:.5];
    id clean = [CCCallBlock actionWithBlock:^{
       [sprite removeFromParentAndCleanup:YES];

       }];
    id seq   = [CCSequence actions:wait,clean,nil];
    [self addChild sprite];
    [sprite runAction:seq];
    if(_currentFrame < maxFrame) {
       _currentFrame++;
       [self scheduleOnce:@selector(flashFrame) delay:2.0];
    } else {
       // do whatever you wanted to do after this sequence.
    }

}

标准免责声明:未经测试,从内存编码,里程会有所不同:)

答案 1 :(得分:0)

考虑使用由CCAnimation的CCS序列(每单位0.2延迟的CCSequence)组成的动作,并在动画之间添加0.5秒的CCDelayTime。然后永远重复动作。此外,如果您使用的是Cocos2d 2.x,请使用CCAnimationCache存储动画。