【发布时间】:2011-08-30 14:41:49
【问题描述】:
我有一些星星闪烁的精灵,图像太大而无法放在一张精灵表上,所以我不得不将它们分布在两个精灵表上。我一直在寻找如何使用两个精灵表中的图像创建单个动画,但没有运气。
这是我尝试过的,它符合要求,但是当动画到达图像开始来自第二个精灵表的位置时崩溃。
//=======================================================================================//
//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];
}
【问题讨论】:
标签: iphone cocos2d-iphone