2013-06-29 1 views
1

Я добавляю один спрайт на тело и запускаю анимацию, но когда я пытаюсь удалить этот спрайт после перезагрузки сцены (вызывается afterLoadProcessing еще раз) - удаляет только первую анимацию. Я новичок в iOS & Программирование Cococs2D, пожалуйста, помогите мне с советами.Один CCAction для нескольких спрайтов - нужно правильно удалить их все

Вот мой код:

-(void)afterLoadProcessing:(b2dJson*)json 
{ 
    [super afterLoadProcessing:json]; 

    [self removeChild:enemysprite cleanup:YES]; 

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"player_enemy.plist"]; 
    CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"player_enemy.png"]; 
    [self addChild:spriteSheet]; 

NSMutableArray *enemyGusenitsaAnimFrames = [NSMutableArray array]; 
    for (int i = 31; i <=36; ++i) { 
     [enemyGusenitsaAnimFrames addObject: 
     [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: 
      [NSString stringWithFormat:@"%d.png",i]]]; 
    } 
    CCAnimation *gusenitsaMovAnim = [CCAnimation animationWithSpriteFrames:enemyGusenitsaAnimFrames delay:0.1f]; 
    _enemyGusenitsaMovement = [CCRepeatForever actionWithAction: 
            [CCAnimate actionWithAnimation:gusenitsaMovAnim]]; 
    _enemyGusenitsaMovement.tag = 109; 

std::vector<b2Body*> enemySprites; 
    json->getBodiesByName("enemy", enemySprites); 
    for (int i = 0; i < enemySprites.size(); i++) { 
     b2Body *bod = enemySprites[i]; 
     enemysprite = [[CCSprite alloc] init]; 

     [enemysprite stopAllActions]; 
     enemysprite.scale = 0.04; 
     [self addChild:enemysprite z:50]; 
     bod->SetUserData(enemysprite); 
     [[enemysprite runAction:[_enemyGusenitsaMovement copy]] autorelease]; 
    } 
    } 

ответ

0

Вместо использования [self removeChild:enemysprite cleanup:YES];, вы можете удалить все дети

[self removeAllChildrenWithCleanup:YES]; 

или петли все органы и удалить его:

for (int i = 0; i < enemySprites.size(); i++) { 
    b2Body *bod = enemySprites[i]; 
    CCSprite *sprite = (CCSprite *)bod->GetUserData(); 
    [self removeChild:sprite]; 
} 
+0

Спасибо Маурисио! :) – user1974123

+0

Добро пожаловать! Пожалуйста, если мой ответ правильный, отметьте его как правильно, чтобы помочь другим пользователям, которые приходят на эту тему с одинаковой проблемой. – Bivis