У меня есть несколько спрайтов мерцающих звезд, и изображения слишком велики, чтобы поместиться на одном листе спрайтов, поэтому мне пришлось распределить их по двум. Я искал, как создать одну анимацию, используя изображения из обоих листов спрайтов, но мне не повезло.
Это то, что я пробовал, оно соответствует нормальному, но затем падает, когда анимация достигает того места, где изображения начинают поступать со второго листа спрайта.
//=======================================================================================//
//Load Stars
frameCache = [CCSpriteFrameCache sharedSpriteFrameCache];
[frameCache addSpriteFramesWithFile:@"starsOne_01.plist"];
[frameCache addSpriteFramesWithFile:@"starsOne_02.plist"];
starSpriteNodeOne_01 = [CCSpriteBatchNode batchNodeWithFile:@"starsOne_01.png"];
[self addChild:starSpriteNodeOne_01 z:-2];
starSpriteNodeOne_02 = [CCSpriteBatchNode batchNodeWithFile:@"starsOne_02.png"];
[self addChild:starSpriteNodeOne_02 z:-2];
//Load frames
starOneFrames_01 = [NSMutableArray array];
for(int i = 1; i <= 12; ++i) {
[starOneFrames_01 addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"starsOne_%d.png", i]]];
}
starOneAnim_01 = [CCAnimation animationWithFrames:starOneAnim_01 delay:0.5f];
[[CCAnimationCache sharedAnimationCache] addAnimation:starOneAnim_01 name:@"starOneAnim_01"];
//=======================================================================================//
//Add stars to the scene
starsOne = [CCSprite spriteWithSpriteFrameName:@"starsOne_1.png"];
starsOne.anchorPoint = ccp(0, 0.5);
starsOne.position = ccp(0, size.height/2);
[starSpriteNodeOne_01 addChild:starsOne];
//animate
starOneAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:starOneAnim_01 restoreOriginalFrame:YES]];
[starsOne runAction:starOneAction];
Есть идеи, где я иду не так? Заранее спасибо.
Привет @JorisMans,
Я попробовал ваш метод, и он, кажется, работает до того момента, когда он пытается добавить анимацию ко второй последовательности. Я попытался запустить методы в обратном порядке (так что сначала starAnimation_02), и он по-прежнему дает то же самое. Первый метод работает нормально, затем, когда запускается второй вызываемый метод, он падает. Вот два моих метода, я сохранил CCLOG в одном из них, чтобы вы понимали, где он падает. Программа достигает REACHED3 CCLOG перед сбоем.
-(void)starAnimation_01
{
[starsOne_01 setVisible:YES];
[starsOne_02 setVisible:NO];
CCCallFunc* customCall = [CCCallFunc actionWithTarget:self selector:@selector(starAnimation_02)];
CCSequence* actionSeq = [CCSequence actions:[CCAnimate actionWithAnimation:starOneAnim_01 restoreOriginalFrame:NO],customCall,nil];
[starsOne_01 runAction:actionSeq];
}
-(void)starAnimation_02
{
[starsOne_02 setVisible:YES];
CCLOG(@"===================REACHED========================");
[starsOne_01 setVisible:NO];
CCLOG(@"===================REACHED2========================");
CCCallFunc* customCall2 = [CCCallFunc actionWithTarget:self selector:@selector(starAnimation_01)];
CCLOG(@"===================REACHED3========================");
CCSequence* actionSeq2 = [CCSequence actions:[CCAnimate actionWithAnimation:starOneAnim_02 restoreOriginalFrame:NO],customCall2,nil];
CCLOG(@"===================REACHED4========================");
[starsOne_02 runAction:actionSeq2];
}