2012-03-03 3 views
1

Итак, проблема здесь в том, что я создаю один анимированный снаряд, все в порядке. Как только пользователь создает вторую, первая останавливает анимацию.Cocos2D - Когда я анимация второго спрайта, первые остановки анимации

Хорошо, вот как я устанавливаю его в моем INIT:

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

Таким образом, при первом нажатии пользователя все работает нормально. Во второй раз создается анимированная пуля, но существующая останавливает анимацию и т. Д.

ответ

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 можно ссылаться несколько анимаций, так что вы должны заботиться о сохранении массива для повторного использования.