重新启动场景时崩溃

时间:2013-08-24 13:25:52

标签: ios cocos2d-iphone dealloc sprite-sheet

所以,这是我的场景问题:我从菜单场景开始,然后进入InGame场景,当角色死了,我再次进入菜单场景,所有这些都使用:

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

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

在输掉游戏并试图回到游戏后,我的SpriteSheet崩溃并出现错误:

'CCSprite is not using the same texture id'

以下是我启动动画的方法:

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

当我将纹理添加到spriteSheet时发生崩溃:

[spriteSheet addChild:texture];

我认为问题来自于纹理的重新分配..

我不使用ARC。

1 个答案:

答案 0 :(得分:1)

缓存中可能有一个“1.png”,对应于在退出重启序列之前创建的另一个动画。也许你想在重新启动之前清除精灵帧缓存(可能还有许多其他东西)。

我完全避免通过'NNNN.png'避免“1.png”,因为很可能你的所有动画都会拥有它们。相反,我使用的是:

walk_classKey_upNNNN.png {上,下,左,右,空闲,跳......以及我需要的任何其他地图姿态) fight_classKey_strikeNNNN.png {罢工,伤害,死......例如)

classKey是{战斗机,流氓......等......无论我有哪种独特士兵类型)

我将我的plist / texture命名为

walk_fighter_up-hd.plist(使用纹理打包器,plist嵌入纹理名称)。 fight_rogue_cheapShot-hd.plist(cheapShot是我当前游戏中的流氓技能之一)。