Question

So, here is my scene problem: I start from a Menu Scene, then go into the InGame Scene, and when the character is dead, I go to the Menu Scene again, all this using:

[[CCDirector sharedDirector] replaceScene:[MainMenu scene]];

and

[[CCDirector sharedDirector] replaceScene:[InGame scene]];

After losing the game, and trying to go back to the game, my SpriteSheet crashes with the error :

'CCSprite is not using the same texture id'

Here is how I init the animation :

- (void) initSprite:(NSString *)plist andTexture:(NSString *)texture_ {

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:plist];

spriteSheet = [CCSpriteBatchNode batchNodeWithFile:texture_];

NSMutableArray *walkAnimFrames = [NSMutableArray array];

for (int i=1; i<=12; i++) {
    [walkAnimFrames addObject:
     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
      [NSString stringWithFormat:@"%d.png",i]]];
}

CCAnimation *walkAnim = [CCAnimation animationWithSpriteFrames:walkAnimFrames delay:0.05f];

texture = [CCSprite spriteWithSpriteFrameName:@"1.png"];
walkAction = [CCRepeatForever actionWithAction: [CCAnimate actionWithAnimation:walkAnim]];
[texture runAction:walkAction];

texture.position = position;
texture.tag = HeroType;
[spriteSheet addChild:texture];

[self addChild:spriteSheet];
}

The crash occurs when I add the texture to the spriteSheet:

[spriteSheet addChild:texture];

I believe the problem comes from the deallocation of the texture..

I don't use ARC.

Was it helpful?

Solution

You probably have a "1.png" in the cache that corresponds to another animation that was created before quit-restart sequence. Maybe you want to purge the sprite frame cache (and possibly a whole lot of other things) prior to restarting.

I completely avoid "1.png" through 'NNNN.png' since in all likelihood all your animations will have them. Instead i use things like :

walk_classKey_upNNNN.png {up,down,left,right,idle,jump ... and any other map stance i need) fight_classKey_strikeNNNN.png {strike,hurt,dead ... for example)

classKey is {fighter,rogue, ... etc ... whichever unique soldier type I have)

and i name my plists/textures the same

walk_fighter_up-hd.plist (using texture packer, the plist embeds the texture name). fight_rogue_cheapShot-hd.plist (cheapShot is one of my rogue's skill in my current game).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top