cocos2d-iphoneccspriteccaction

how to change a sprite's Image during a sequence of actions


In my code (sample) below I would like to change the sprite's image during the sequence of actions.

spriteActions =  [CCRepeatForever actionWithAction:
                    [CCSequence actions:
                     [CCShow action],
                     [CCDelayTime actionWithDuration:1.5],
                     [CCHide action],
                     [CCDelayTime actionWithDuration:5.0],
                     [CCShow action],
                     [CCDelayTime actionWithDuration:3.0],
                     // I would like to change the sprite image here before completing the remaining actions. 
//I want this line here: sprite = [CCSprite SpriteWithFile:@"newSpriteImage.png"];
                     [CCMoveTo actionWithDuration:2.0 position:newSpritePos],
                     [CCHide action],
                     [CCDelayTime actionWithDuration:2.0],
                    nil]];

[sprite runAction:spriteActions];

Thanks for the assistance.


Solution

  • You do like this:

    [CCRepeatForever actionWithAction:
                        [CCSequence actions:
                         [CCShow action],
                         [CCDelayTime actionWithDuration:1.5],
                         [CCHide action],
                         [CCDelayTime actionWithDuration:5.0],
                         [CCShow action],
                         [CCDelayTime actionWithDuration:3.0],
                         // I would like to change the sprite image here before completing the remaining actions. 
    [CCCallBlockN actionWithBlock:^(CCNode*node){
    CCSprite *spritN = (CCSprite*)node;
    
     //[spritN setDisplayFrame:[cache spriteFrameByName:@"newSpriteImage.png"]]
    
                CCTexture2D* tex = [[CCTextureCache sharedTextureCache] addImage:@"newSpriteImage.png"];
                CGSize texSize = tex.contentSize;
                CGRect texRect = CGRectMake(0, 0, texSize.width, texSize.height);
                CCSpriteFrame* frame = [CCSpriteFrame frameWithTexture:tex rect:texRect];
                 [spritN setDisplayFrame:frame];
                                                            }],
                         [CCMoveTo actionWithDuration:2.0 position:newSpritePos],
                         [CCHide action],
                         [CCDelayTime actionWithDuration:2.0],
                        nil]];