Сбой при перезапуске сцены

Итак, вот моя проблема сцены: я начинаю со сцены меню, затем захожу в сцену 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 ответ

Решение

Вероятно, у вас есть "1.png" в кеше, который соответствует другой анимации, которая была создана перед последовательностью перезапуска. Возможно, вы хотите очистить кэш спрайтовых кадров (и, возможно, множество других вещей) перед перезапуском.

Я полностью избегаю "1.png" через "NNNN.png", так как, по всей вероятности, все ваши анимации будут иметь их. Вместо этого я использую такие вещи, как:

walk_classKey_upNNNN.png {вверх, вниз, влево, вправо, на холостом ходу, прыгать... и любая другая позиция на карте, которая мне нужна) fight_classKey_strikeNNNN.png {удар, боль, смерть... например)

classKey - {боец, жулик, и т. д.... какой бы тип солдата у меня не был)

и я называю свои списки / текстуры одинаковыми

walk_fighter_up-hd.plist (используя упаковщик текстур, plist встраивает имя текстуры). fight_rogue_cheapShot-hd.plist (cheapShot - один из навыков моего мошенника в моей текущей игре).

Другие вопросы по тегам