2014-04-01 2 views
0

У меня возникли проблемы с анимацией моего листа спрайтов. Я получил этот код раньше, и он сработал. У меня было 2 кадра, и моей переменной в моем цикле было разрешено достигать значений 0 и 1, так как имена фреймов были stickman0-568.png и stickman1-568.png. Мои рамки были не так хороши, поэтому я создал новый лист спрайтов с 3 кадрами в нем, stickman0-568.png, stickman1-568.png и stickman2-568.png. Мой файл .list называется sickman-568.plist, а лист спрайтов .png - stickman-568.png. Я изменил цикл, чтобы достичь значения 2 (0,1,2). Когда я запускаю его сейчас, он падает, несмотря на то, что он работает раньше, когда у меня было только 2 кадра. Может кто-нибудь, пожалуйста, дайте мне советы относительно того, что могло пойти не так? Вот мой код, так что вы можете увидеть, что я сделал:Анимированные спрайты в Cocos2d

-(id) init 
{ 
    if((self=[super init])) 
    { 
     backGroundDesert = [CCSprite spriteWithFile:@"DesertMap.png"]; 
     backGroundDesert.position = ccp(backGroundDesert.textureRect.size.width/2, backGroundDesert.textureRect.size.height/2); 
     [self addChild:backGroundDesert]; 
     [backGroundDesert runAction:[CCMoveBy actionWithDuration:100 position:ccp(-1400,0)]]; 

     [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"stickman-568.plist"]; 
     CCSprite *mainGuy = [CCSprite spriteWithSpriteFrameName:@"stickman0-568.png"]; 
     mainGuy.position = ccp(40,backGroundDesert.textureRect.size.height/2); 
     CCSpriteBatchNode *batchNode = [CCSpriteBatchNode batchNodeWithFile:@"stickman-568.png"]; 
     [batchNode addChild:mainGuy]; 
     [self addChild:batchNode]; 
     NSMutableArray *animFrames = [NSMutableArray array]; 
     for(int i = 0; i < 3; i++) 
     { 
      CCSpriteFrame *frames = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"stickman%02d-568.png", i]]; 
      [animFrames addObject:frames]; 
     } 
     CCAnimation *cape = [CCAnimation animationWithSpriteFrames:animFrames delay:0.2f]; 
     [mainGuy runAction:[CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:cape restoreOriginalFrame:NO]]]; 
    } 
    return self; 
} 

-(void)dealloc 
{ 
    [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 
    [super dealloc]; 
} 

ответ

1

при запуске кода для цикла создания изображения, как под именем

stickman00-568.png 
stickman01-568.png 
stickman02-568.png 

Это не изображения в ваших источников, поэтому только заменить ниже line в вашем цикле for for. Он работает нормально.

Изменить код, как указано ниже.

CCSpriteFrame *frames = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"stickman%d-568.png", i]]; 

See this

+0

Спасибо за предложение, но это не было проблемой. Я понял, что my textureFileName в разделе метаданных моего файла .plist не соответствует моему коду. Спасибо хоть. – FreeFire

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