1

下面我的代码中的 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]];
}
4

2 回答 2

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.
    }

}

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

于 2013-04-08T16:12:50.280 回答
0

考虑让一个动作由 CCAnimation 的 CCSequence(每单位延迟 0.2 的那个)组成,并在动画之间添加 0.5 秒的 CCDelayTime。然后永远重复这个动作。此外,如果您使用 Cocos2d 2.x 及更高版本,请使用 CCAnimationCache 来存储您的动画。

于 2013-04-07T17:50:59.783 回答