Задержка в игровом цикле и естественное удаление спрайтов - PullRequest
0 голосов
/ 19 июня 2009

Я делаю игру с cocos2d, и у меня есть куча спрайтов, которые я хотел бы удалить. Например, у меня может быть несколько персонажей на экране, но когда моя игра закончится, я бы хотел их убрать. Прямо сейчас я создал специальный эффект (систему частиц) как отвлечение, но потому что он прозрачен и не покрывает весь экран, через который вы можете видеть и наблюдать, как спрайты исчезают, когда я удаляю их со слоя.

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

Есть предложения по моим 2 проблемам? Спасибо.

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

}

Ответы [ 2 ]

1 голос
/ 19 июня 2009

Вы можете отложить действие удаления, используя executeSelector: withObject: afterDelay :. Например:

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

Обратите внимание, что executeSelector: withObject: afterDelay: сохранит объект toRemove и сохранит его работоспособным до тех пор, пока он не вызовет removeSprites, поэтому вам не нужно делать ничего особенного с toRemove (за исключением того, что вам все еще нужно освобождать его, как показано с у тебя это тоже есть).

1 голос
/ 19 июня 2009

Вам необходимо выполнить «специальный эффект» в потоке, чтобы он выполнял вместе с удалением вашего спрайта. Поиск NSThread для получения дополнительной информации, но это позволит вам синхронизировать два процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...