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

问题描述:

所以这里的问题是当我创建一个动画射弹时,一切都很好。只要用户创建第二个,第一个停止动画。Cocos2D - 当我动画第二个精灵时,首先停止动画

好了,这里就是我如何设置它在我的初始化:

[[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]; 

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

我相信每个精灵都应该有自己的行为,也就是说,当行动正在进行时,你不能重用一个行动。例如:

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可以被多个动画引用,所以您必须注意保留数组以供重用。