0

I have tried to run multiple animation 1.Player will stand on screen loading 2.Then he starts running when his frames finish 3.Player will stop and Go action performed

problem is go action is executed before run action finishes

can any one help me to perform this task like player run 0.6 secs then he stops running action and Go action execute and after 4 sec it stops

- (void)didLoadFromCCB
{
    CGSize winSize = [[CCDirector sharedDirector] viewSize];

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"cc_player.plist"];

    NSMutableArray *runAnimFrames = [NSMutableArray array];
    for(int i = 0; i <= 12; i++)
    {
        [runAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"cc_player/cc_player_run_pistol_%d.png", i]]];
    }

    NSMutableArray *goAnimFrames = [NSMutableArray array];
    for(int i = 0; i <= 11; i++)
    {
        [goAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"cc_player/cc_player_go_%d.png", i]]];
    }

    CCSprite *playerSprite = [CCSprite spriteWithImageNamed:@"cc_player/cc_player_idle_0.png"];

    playerSprite.scale = 1.3;
    playerSprite.position = CGPointMake(100, ( winSize.height / 2) - 60);
    [self addChild:playerSprite z:3];

    CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:8 position:CGPointMake(winSize.width+100 / 2, playerSprite.position.y)];


    CCAnimation *runAnim = [CCAnimation animationWithSpriteFrames:runAnimFrames delay:0.06]; 

    CCAnimation *goAnim = [CCAnimation animationWithSpriteFrames:goAnimFrames delay:0.06]; 

    CCActionAnimate *runAnimationAction = [CCActionAnimate actionWithAnimation:runAnim];

    CCActionAnimate *goAnimationAction = [CCActionAnimate actionWithAnimation:goAnim];




    CCActionCallBlock *next=[CCActionCallBlock actionWithBlock:^
    {
        playerSprite.position = CGPointMake(playerSprite.position.x - 8, playerSprite.position.y + 6);
        id goAction = [CCActionRepeat actionWithAction:goAnimationAction times:1];

        CCActionCallBlock *nextStep=[CCActionCallBlock actionWithBlock:^
        {
            NSLog(@"***********not done");
            //   [playerSprite stopAllActions];

        }];

        CCActionSpawn *groupAction1 = [CCActionSpawn actionWithArray:@[goAction,nextStep]];

        CCActionSequence *sequence2 = [CCActionSequence actionWithArray:@[groupAction1]];

        // [playerSprite stopAllActions];
        //CCActionSequence *goSequence = [CCActionSequence actions:moveTo,repeatingAnimation, nil];
        [playerSprite runAction:sequence2];

    }];


    CCActionSpawn *groupAction = [CCActionSpawn actionWithArray:@[moveTo, next]];

    CCActionSequence *sequence = [CCActionSequence actionWithArray:@[groupAction]];

    [playerSprite runAction:sequence];


    [playerSprite runAction:[CCActionRepeatForever actionWithAction:runAnimationAction]];
}
Guntis Treulands
  • 4,764
  • 2
  • 50
  • 72
Ame
  • 1
  • 2
  • any reason why you don't create this animation as a timeline in spritebuilder? – CodeSmile Jun 16 '14 at 08:15
  • it worked now i am sharing code here in a minute. I used this way because later i can reuse my run animation or go animation independently. – Ame Jun 16 '14 at 09:21
  • sorry i can post it now because my reputation se 8 i will do after wait time of 8 hours – Ame Jun 16 '14 at 09:31
  • @LearnCocos2D i will greatfull to you if you suggest me any better way I am new in game development so I thought creating different actions can help me reuse them later in different part of game. – Ame Jun 16 '14 at 09:32

1 Answers1

0

i have removed opticity line from code animation started showing now i have change sequance of my animation and its now working nice

(void)didLoadFromCCB
{
CGSize winSize = [[CCDirector sharedDirector] viewSize];

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"cc_player.plist"];

NSMutableArray *runAnimFrames = [NSMutableArray array];
for(int i = 0; i <= 12; i++)
{
    [runAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"cc_player/cc_player_run_pistol_%d.png", i]]];
}

NSMutableArray *goAnimFrames = [NSMutableArray array];
for(int i = 0; i <= 11; i++)
{
    [goAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"cc_player/cc_player_go_%d.png", i]]];
}

CCSprite *playerSprite = [CCSprite spriteWithImageNamed:@"cc_player/cc_player_idle_0.png"];

playerSprite.scale = 1.3;
playerSprite.position = CGPointMake(100, ( winSize.height / 2) - 60);
[self addChild:playerSprite z:3];

CCActionMoveTo *moveTo = [CCActionMoveTo actionWithDuration:3 position:CGPointMake(300, playerSprite.position.y)];


CCAnimation *runAnim = [CCAnimation animationWithSpriteFrames:runAnimFrames delay:0.06]; 

CCAnimation *goAnim = [CCAnimation animationWithSpriteFrames:goAnimFrames delay:0.06]; 

CCActionAnimate *runAnimationAction = [CCActionAnimate actionWithAnimation:runAnim];

CCActionAnimate *goAnimationAction = [CCActionAnimate actionWithAnimation:goAnim];




CCActionCallBlock *next=[CCActionCallBlock actionWithBlock:^
{
    playerSprite.position = CGPointMake(playerSprite.position.x - 8, playerSprite.position.y + 6);
    id goAction = [CCActionRepeat actionWithAction:goAnimationAction times:1];

    CCActionCallBlock *nextStep=[CCActionCallBlock actionWithBlock:^
    {

        //   [playerSprite stopAllActions];

    }];

    CCActionSpawn *groupAction1 = [CCActionSpawn actionWithArray:@[goAction,nextStep]];

    CCActionSequence *sequence2 = [CCActionSequence actionWithArray:@[groupAction1]];

    // [playerSprite stopAllActions];
    //CCActionSequence *goSequence = [CCActionSequence actions:moveTo,repeatingAnimation, nil];
    [playerSprite runAction:sequence2];

}];

[playerSprite runAction:[CCActionRepeatForever actionWithAction:runAnimationAction]];

CCActionSpawn *groupAction = [CCActionSpawn actionWithArray:@[moveTo,runAnimationAction]];

CCActionSequence *sequence = [CCActionSequence actionWithArray:@[groupAction,next]];

[playerSprite runAction:sequence];
}
Nick Weaver
  • 47,228
  • 12
  • 98
  • 108
Ame
  • 1
  • 2