Question

Je suis en train de créer un jeu avec cocos2d et j’aimerais supprimer un certain nombre de sprites. Par exemple, je pourrais avoir un tas de personnages à l'écran, mais quand mon jeu sera terminé, j'aimerais 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 lorsque je les retire du calque.

De plus, parce que les instructions s'exécutent si rapidement pour l'utilisateur, elles apparaissent comme si les sprites disparaissaient avant le début de l'effet de particules!

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

}

Était-ce utile?

La solution

Vous pouvez retarder l'action de suppression à l'aide de 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 conservera en vie jusqu’à ce qu’il appelle removeSprites. Vous n’avez donc rien à faire avec toRemove (sauf que vous devez le relâcher tel qu’indiqué ci-dessus). vous le possédez également).

Autres conseils

Vous devez créer votre "effet spécial" dans un fil de discussion pour qu'il soit associé à votre sprite remove. Recherchez NSThread pour plus d'informations, mais cela vous permettra de synchroniser les deux processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top