Pergunta

Eu estou fazendo um jogo com cocos2d e eu tenho um monte de sprites que eu gostaria de apagar. Por exemplo, eu poderia ter um monte de personagens na tela, mas quando meu jogo acabou eu gostaria de limpá-los. Agora eu criei um efeito especial (sistema de partículas) como uma distração, mas porque é transparente e não cobre toda a tela, você pode ver através e observar os sprites desaparecer como eu removê-los da camada.

Também porque as instruções executar tão rápido ao usuário, ele aparece como se os sprites desaparecer antes que o efeito das partículas começa!

Todas as sugestões sobre os meus 2 problemas? Obrigado.

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

}

Foi útil?

Solução

Você pode atrasar a ação de remoção usando performSelector: withObject: afterDelay :. Por exemplo:

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

Note que performSelector: withObject: afterDelay: vai manter o objeto toremove e mantê-lo vivo até depois que ele chama removeSprites, assim você não precisa fazer nada especial com toremove (exceto que você ainda precisa liberá-lo como mostrado desde que ele próprio também).

Outras dicas

Você precisa fazer o seu 'efeito especial' em um segmento, para que seja executada ao lado seu sprite remove. Lookup NSThread para mais informações, mas isso vai permitir que você sincronize os dois processos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top