Cocos2D - 当我动画第二个精灵时,首先停止动画

时间:2012-03-03 22:45:04

标签: animation cocos2d-iphone ccsprite sprite-sheet

所以这里的问题是当我制作一个动画射弹时,一切都很好。一旦用户创建了第二个,第一个停止动画。

好的,这是我在初始化中设置的方式:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:
     @"acorns.plist"];

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode 
                                      batchNodeWithFile:@"acorns.png"];
[self addChild:spriteSheet];

NSMutableArray *flyingFrames = [NSMutableArray array];
    for(int i = 1; i <= 4; ++i) {
        [flyingFrames addObject:
         [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
          [NSString stringWithFormat:@"acorn%d.png", i]]];
    }

CCAnimation *flying = [CCAnimation 
                                 animationWithFrames:flyingFrames delay:0.5f];

self.flying = [CCRepeatForever actionWithAction:
                   [CCAnimate actionWithAnimation:flying restoreOriginalFrame:NO]];

然后,在用户点击屏幕时调用的创建项目符号方法中,我执行:

CCSprite *bullet = [CCSprite spriteWithSpriteFrameName:@"acorn1.png"];
bullet.position = CGPointMake(140.0f, FLOOR_HEIGHT+145.0f);
[bullet runAction:_flying];

[self addChild:bullet z:9];
[bullets addObject:bullet];

因此,当用户第一次点击时,一切正常。第二次创建一个动画子弹,但现有的子弹停止动画,依此类推。

1 个答案:

答案 0 :(得分:2)

我相信每个精灵都应该有自己的行动,即在动作进行过程中你无法重复动作。类似的东西:

CCSprite *bullet = [CCSprite spriteWithSpriteFrameName:@"acorn1.png"];
bullet.position = CGPointMake(140.0f, FLOOR_HEIGHT+145.0f);
id _fly=[CCAnimation animationWithFrames:flyingFrames delay:0.5f];
id _flyForever = [[CCRepeatForever _fly];
[bullet runAction:_flyForever];
[self addChild:bullet z:9];
[bullets addObject:buller];

flyingFrames可以被多个动画引用,因此您必须注意保留数组以便重复使用。