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];

 

posted @ 2014-04-17 10:50  有妄想症的猫zz  阅读(781)  评论(0编辑  收藏  举报