CCSprite: fade 效果切换图片
//CCSprite+Animation.h #import "CCSprite.h" @interface CCSprite (Animation) + (void)fadeWithOldSprite:(CCSprite *)oldSprite newSprite:(CCSprite *)newSprite callFuncTarget:(id)target callFuncAction:(SEL)action fadeDuration:(NSTimeInterval)duration; @end //CCSprite+Animation.m #import "CCSprite+Animation.h" #import "CCActionInterval.h" #import "CCActionInstant.h" @implementation CCSprite (Animation) + (void)fadeWithOldSprite:(CCSprite *)oldSprite newSprite:(CCSprite *)newSprite callFuncTarget:(id)target callFuncAction:(SEL)action fadeDuration:(NSTimeInterval)duration { [oldSprite.parent addChild:newSprite z:oldSprite.zOrder]; CCFadeOut *fadeOut = [CCFadeOut actionWithDuration:duration]; CCCallFunc *callFunc = [CCCallFunc actionWithTarget:target selector:action]; CCSequence *sequence = [CCSequence actionWithArray:@[fadeOut, callFunc]]; [oldSprite runAction:sequence]; CCFadeIn *fadeIn = [CCFadeIn actionWithDuration:duration]; [newSprite runAction:fadeIn]; } @end
实现3秒切换图片
- (void)startToFadeSprite { static NSString *imageNames[] = { @"sample_img@2x.png", @"sample_img2@2x.png", @"sample_img3@2x.png", @"sample_img4@2x.png" }; static NSInteger index = 0; static NSInteger imageCount = 4; if (index == imageCount) { index = 0; } if (fading == NO) { fading = YES; photoTemp = [CCSprite spriteWithFile:imageNames[index]]; photoTemp.textureRect = photo.textureRect; photoTemp.anchorPoint = photo.anchorPoint; photoTemp.position = photo.position; photoTemp.scaleX = photo.scaleX; photoTemp.scaleY = photo.scaleY; [CCSprite fadeWithOldSprite:photo newSprite:photoTemp callFuncTarget:self callFuncAction:@selector(fadeFinished) fadeDuration:0.3]; index++; } } - (void)fadeFinished { [self removeChild:photo]; photo = photoTemp; fading = NO; CCDelayTime *delay = [CCDelayTime actionWithDuration:2.7]; CCCallFunc *callFunc = [CCCallFunc actionWithTarget:self selector:@selector(startToFadeSprite)]; [self runAction:[CCSequence actions:delay, callFunc, nil]]; } //init photo = [CCSprite spriteWithFile:@"sample_img@2x.png"]; [self addChild:photo]; //just after [self startToFadeSprite];