我的代码中的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]];
}
答案 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存储动画。