2012-04-24 4 views
1

, поэтому я создаю спрайт каждую секунду, но теперь я хотел бы заменить этот спрайт на spriteSheetAnimation. но когда я запускаю этот код моего приложения аварию:Моя анимация spriteSheet разбивает мое приложение

- (void)spawnCat { 
    CCSpriteBatchNode *spriteSheet2 = [CCSpriteBatchNode batchNodeWithFile:@"AnimBulle.png"]; 
    [self addChild:spriteSheet2]; 

    // Load up the frames of our animation 
    NSMutableArray *walkAnimFrames = [NSMutableArray array]; 
    for(int i = 1; i <= 8; ++i) { 
     [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"AnimBulle%d.png", i]]]; 
    } 
    CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames 
                 delay:0.1f]; 
    [target runAction:_walkAction]; 
    target.tag = 1; 
    [_targets addObject:target]; 

    [self addBoxBodyForSprite:target]; 
    [spriteSheet2 addChild:target z:0 tag:1]; 
    id actionMove = [CCMoveTo actionWithDuration:actualDuration 
             position:ccp(240, 160)]; 
    id actionMoveDone = [CCCallFuncN actionWithTarget:self 
              selector:@selector(spriteDone:)]; 
[target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]]; 
} 
+0

какая авария? каков результат на консоли? – sergio

+0

Я не знаю, потому что у меня всегда есть ошибка, которой недостаточно кадров в стеке, поэтому я не вижу, что находится в консоли:/ –

ответ

1

EDIT: Из рода ошибки вы получаете (не хватают трассировки стеки), то есть inifinite рекурсия (то есть метод, который в конце концов, называющие себя, прямо или косвенно). Код в spawnCat, похоже, не влечет такой бесконечной рекурсии, поэтому проблема должна быть где-то в другом месте.

0 Как назовут spawnCat? можете ли вы поместить некоторые следы NSLog в методы, которые выполняются для создания анимации, чтобы вы видели, кто-то продолжает называть себя?

ОРИГИНАЛЬНЫЙ ОТВЕТ: Вы уверены, что это вы имели в виду?

CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f]; 
[target runAction:_walkAction]; 

Я не могу видеть _walkAction инициализации, но я ожидаю, что вы делаете, что после создания анимации, делая что-то вроде:

CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f]; 
_walkAction = [CCAnimate actionWithAnimation:walkAnim]; 
[target runAction:_walkAction]; 
+0

да, это то, что я сделал, я забыл поставить вопрос в свой вопрос, но почему мое приложение падает –

+0

, пожалуйста, помогите мне !! :( –

+0

ошибка: «недостаточно кадров в стеке» приходят ко всему моему проекту, это не относится к этому. Но это не основная ошибка, потому что я все еще могу строить и запускать, моя единственная ошибка исходит от этой части кода, я не знаю, почему –

0

Единственное, что я могу видеть в коде возможность того, что ваш spriteFrame не найден. Когда вы пытаетесь добавить nil в массив, вы можете получить неприятные результаты. Я бы поправил петлю следующим образом (помощь в регистрации).

for(int i = 1; i <= 8; ++i) { 
    NSString *sfn = [NSString stringWithFormat:@"AnimBulle%d.png", i]; 
    CCSpriteFrame *sf = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:sfn]; 
    if(sf) { 
     [walkAnimFrames addObject:sf]; 
    } else { 
     CCLOGERROR(@"%@<spawnCat> : *** Sprite frame named [%@] not found in cache, bailing out.",self.class,sfn); 
     return; // ok here, nothing is retained before this may be executed 
    } 
} 

Кроме того, вы можете убедиться, что вы на самом деле загрузили spriteFrameCache с .plist и текстуре перед вызовом этого и что вы не removeUnusedSpriteFrames из кэша где-нибудь еще в цикле выполнения.

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