Cocos2D - Когда я анимирую второй спрайт, первый прекращает анимацию - PullRequest
1 голос
/ 04 марта 2012

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

Хорошо, вот как я настраиваю ее в моем 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]];

Затем, в моем методе create bulletsкоторый вызывается, когда пользователь нажимает на экран, я делаю:

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 Ответ

2 голосов
/ 04 марта 2012

Я считаю, что каждый спрайт должен иметь свои собственные действия, то есть вы не можете повторно использовать действие во время выполнения действия.Примерно так:

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

На летящие кадры могут ссылаться несколько анимаций, поэтому вы должны позаботиться о сохранении массива для повторного использования.

...