Search code examples
ioscocos2d-iphonesprite

cocos2d animation not showing of sprite sheet


I have some strange error happening with my game. How anyone can help me to get solve form this. I have a runner game and hero is collecting coins while running ,when hero touches the coin,now I am showing a particle effect created with the help of particle maker.and it's working fine. But last day I purchased a software and it gives us really good particle effects but it can only export as pngs. so I made sprite sheet and instead of previous particle animation I put this on the contact listener code for showing this effect when hero touches the coin. Unfortunately it is not showing anything. Here is my previous code :

-(void) checkHeroAndCoins {
float fDelta = 0;
if(m_hero->m_bMagnet)
    fDelta = iDevPixelX(30);

for(Coin *coin in m_drawLayer.children){
    if([coin isKindOfClass:[Coin class]]){
        CGRect rCoin = CGRectMake(coin.position.x - coin.contentSize.width * coin.scaleX / 2.0f - fDelta,
                                  coin.position.y - coin.contentSize.height * coin.scaleY / 2.0f - fDelta,
                                  coin.contentSize.width * coin.scaleX + fDelta * 2, coin.contentSize.height * coin.scaleY + fDelta * 2);
        CGRect rHero = CGRectMake(m_hero.position.x - m_hero.contentSize.width * m_hero.scaleX / 2.0f, m_hero.position.y, m_hero.contentSize.width * m_hero.scaleX, m_hero.contentSize.height * m_hero.scaleY);
        if(CGRectIntersectsRect(rCoin, rHero)){
            coin.tag = DELETED_TAG;
            g_nCoin++;
            [[AppDelegate getDelegate] playSystemEffect:E_COIN];
// this below code is to show the particle effect and its working perfect
              CCParticleSystem *effect = [ARCH_OPTIMAL_PARTICLE_SYSTEM particleWithFile:@"arroweffect.plist"];
        [self addChild:effect];
        effect.position = ccp(self.contentSize.width * self.scaleX / 2, self.contentSize.height * self.scaleY / 2.0f);
        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
            effect.scale *= 2;



        }
    }
}
[[AppDelegate getDelegate] saveSetting];
}

But after I put sprite sheet as animation to show the effect , it is not working , I tried my best but not able to solve this. this is my code for the sprite sheet animation :

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

//load the sprite sheet into a CCSpriteBatchNode object. If you're adding a new sprite

//to your scene, and the image exists in this sprite sheet you should add the sprite

//as a child of the same CCSpriteBatchNode object otherwise you could get an error.

CCSpriteBatchNode *parrotSheet12 = [CCSpriteBatchNode batchNodeWithFile:@"coinsprite.png"];



//add the CCSpriteBatchNode to your scene

[self addChild:parrotSheet12];


//load each frame included in the sprite sheet into an array for use with the CCAnimation object below

NSMutableArray *flyAnimFrames12 = [NSMutableArray array];

for(int i = 1; i <=30; ++i) {

    [flyAnimFrames12 addObject:

     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:

      [NSString stringWithFormat:@"coins%04d.png", i]]];

}

//Create the animation from the frame flyAnimFrames array

CCAnimation *flyAnim12 = [CCAnimation animationWithFrames:flyAnimFrames12 delay:1.0f];

//create a sprite and set it to be the first image in the sprite sheet

CCSprite * dragont2 = [CCSprite spriteWithSpriteFrameName:@"coins0000.png"];

//set its position to be dead center, i.e. screen width and height divided by 2

[dragont2 setPosition:ccp(600,600)];

//[self moveRandom:theParrot];
//create a looping action using the animation created above. This just continuosly

//loops through each frame in the CCAnimation object

CCAction *flyAction12 = [CCRepeatForever actionWithAction:

                         [CCAnimate actionWithAnimation:flyAnim12 restoreOriginalFrame:NO]];

//start the action

[dragont2 runAction:flyAction12];

//add the sprite to the CCSpriteBatchNode object

[parrotSheet12 addChild:dragont2];

Solution

  • problem got solved

    -(void) coinanimationeffect:(CGPoint) ptPos {
    m_gamecoinffect = [CCSprite spriteWithSpriteFrameName:@"coins0001.png"];
    [self addChild:m_gamecoinffect];
    
    
    
    CCAnimate *coineffect = [CCAnimate actionWithSpriteSequence:@"coins%04d.png" numFrames:30 delay:0.01f restoreOriginalFrame:NO];
    [m_gamecoinffect runAction:[CCRepeatForever actionWithAction:coineffect]];
    
    m_gamecoinffect.position = ptPos;
    if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
        m_gamecoinffect.scale *= 2;
    

    }

    added this function

    and call that function in

    -(void) checkHeroAndCoins {
    float fDelta = 0;
    if(m_hero->m_bMagnet)
        fDelta = iDevPixelX(30);
    
    for(Coin *coin in m_drawLayer.children){
        if([coin isKindOfClass:[Coin class]]){
            CGRect rCoin = CGRectMake(coin.position.x - coin.contentSize.width * coin.scaleX / 2.0f - fDelta,
                                      coin.position.y - coin.contentSize.height * coin.scaleY / 2.0f - fDelta,
                                      coin.contentSize.width * coin.scaleX + fDelta * 2, coin.contentSize.height * coin.scaleY + fDelta * 2);
            CGRect rHero = CGRectMake(m_hero.position.x - m_hero.contentSize.width * m_hero.scaleX / 2.0f, m_hero.position.y, m_hero.contentSize.width * m_hero.scaleX, m_hero.contentSize.height * m_hero.scaleY);
            if(CGRectIntersectsRect(rCoin, rHero)){
                coin.tag = DELETED_TAG;
                g_nCoin++;
                [[AppDelegate getDelegate] playSystemEffect:E_COIN];
    
    
    
             [self coinanimationeffect:ccp(coin.position.x, coin.position.y)];
    
    
    
    
    
    
            }
        }
    }
    [[AppDelegate getDelegate] saveSetting];
    

    }