2009-06-19 5 views
0

Je fais un jeu avec cocos2d et j'ai un tas de sprites que je voudrais supprimer. Par exemple, je pourrais avoir un tas de caractères sur l'écran mais quand mon jeu est terminé, je voudrais les nettoyer. En ce moment, j'ai créé un effet spécial (système de particules) comme distraction, mais parce qu'il est transparent et ne couvre pas tout l'écran, vous pouvez voir à travers et regarder les sprites disparaître comme je les retire de la couche.Se bloquer dans une boucle de jeu et supprimer les sprites naturellement

De plus, comme les instructions s'exécutent si rapidement à l'utilisateur, il semble que les sprites disparaissent avant que l'effet de particules ne commence!

Des suggestions sur mes 2 problèmes? Merci.

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove 

spriteCount = 0; 
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything 
     [self specialEffect]; // runs for maybe 3 seconds. 
        // how can I stall here so that the sprites aren't removed "instantaneously"? 
     for (Character* aCharacter in toRemove) { 
      [aCharacter.parent remove:aCharacter];  
     } 

}

Répondre

1

Vous pouvez différer l'action de suppression en utilisant performSelector: withObject: afterDelay :. Par exemple:

NSMutableArray *toRemove = [[NSMutableArray alloc] init]; // array of sprites that I collect to remove 
    spriteCount = 0; 
    if([self findAllSprites:parent forRemoval:toRemove] > 0){ // is there is at least one sprite to delete. If not then don't do anything 
     [self specialEffect]; // runs for maybe 3 seconds. 
     [self performSelector:@selector(removeSprites:) withObject: toRemove afterDelay:1.0]; 
    } 
    [toRemove release]; 

- (void) removeSprites: (NSArray*) toRemove 
{ 
    for (Character* aCharacter in toRemove) { 
     [aCharacter.parent remove:aCharacter];   
    } 
} 

Notez que performSelector: withObject: afterDelay: conservera l'objet toRemove et le garder en vie jusqu'à ce qu'il appelle removeSprites, donc vous ne devez pas faire quelque chose de spécial avec toRemove (sauf que vous avez encore besoin de le libérer comme indiqué puisque vous le possédez aussi bien).

+0

Merci! Cela a merveilleusement bien fonctionné. – Stu

1

Vous devez faire votre « effet spécial » dans un fil, de sorte qu'il fonctionne aux côtés de votre supprimer sprite. Recherchez NSThread pour plus d'informations, mais cela vous permettra de synchroniser les deux processus.

Questions connexes