2013-08-24 2 views
0

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

+2

Ваше использование листов спрайтов здесь является излишним. Для каждого спрайта, созданного с помощью initSprite, вы создаете узел спрайт-спрайта для этого спрайта. С или без пакетного узла вы получаете один призыв на вызов для спрайта. Матчи не ускоряют анимацию, они ускоряют рендеринг нескольких спрайтов, используя ту же текстуру, чтобы вы могли отображать 10 или сотни одинаковых спрайтов в одном обратном вызове. – LearnCocos2D

+0

Я понимаю, я использовал его для рисования анимации персонажа. У меня есть спрайт-лист из 12 спрайтов (http://oi42.tinypic.com/2s6oe3n.jpg), что бы лучше всего сделать по вашему мнению? – thegameg

ответ

1

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

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

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

ClassKey является {боец, жулик, ... и т.д. ... в зависимости от того уникального типа солдата у меня есть)

и я назвал мой plists/текстуры тем же

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

+0

Это был кэш, спасибо. Просто добавлен '[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];' и он работает. Что соответствует NNNN.png? – thegameg

+0

фреймы с именем 1.png, 2.png, 3.png ... NNN.png. – YvesLeBorg

Смежные вопросы