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