Кокос2д. Один экземпляр CCLayer с частицами для множества сцен?

Я хочу создать звездное небо для некоторых сцен. Основная проблема в том, что нужно некоторое время, чтобы заполнить весь экран частицами. Кто-то советует мне сначала создать целое небо и сохранять его между его вызовами. Я пробовал что-то вроде этого:

@implementation StarrySky

static StarrySky *_starrySky;

- (id)init
{
    if ((self = [super init])) {
        NSArray *starsArray = [NSArray arrayWithObjects:@"Stars1.plist", @"Stars2.plist", @"Stars3.plist", nil];
        for(NSString *stars in starsArray) {        
            CCParticleSystemQuad *starsEffect = [CCParticleSystemQuad particleWithFile:stars];        
            [self addChild:starsEffect z:-2];
        }
    }
    return self;
}

+ (StarrySky *)sharedStarrySky
{
    if (!_starrySky) {
        _starrySky = [[StarrySky alloc] init];
    }
    return _starrySky;
}

- (void)dealloc
{
    _starrySky = nil;
    [super dealloc];
}

@end

Но частицы перестают двигаться.


person Gargo    schedule 11.06.2012    source источник
comment
Ваша идея верна, однако Cocos останавливает таймеры слоя, когда он удаляется из родительского слоя. Что вам нужно сделать, так это заглянуть в планировщик и найти способ либо восстановить таймеры, либо убедиться, что они не остановлены. Вы также можете поспрашивать на форуме кокосов.   -  person EmilioPelaez    schedule 11.06.2012


Ответы (1)


Одно из решений, которое должно сработать, — это создать систему звездных частиц и добавить ее в вашу первую сцену (то есть в главное меню). Сделайте его невидимым или переместите его подальше от экрана или за фоновое изображение (самый низкий порядок z), чтобы он мог создавать несколько звезд, фактически не отображая звезд в меню.

Теперь, когда вы переключаетесь на реальную игровую сцену, вы выделяете/инициируете игровую сцену, а затем удаляете систему звездных частиц из текущей сцены и добавляете ее в игровую сцену. По сути, вы перемещаете его из одной сцены в другую.

Теперь вы можете вызвать replaceScene с игровой сценой, которая теперь содержит уже активную систему звездных частиц.

person LearnCocos2D    schedule 11.06.2012
comment
Ваш совет почти полезен. Работает только изменение z-порядка. Настройка видимости не работает должным образом. Результатом visible=NO является то, что частицы генерируются только тогда, когда они становятся видимыми. Второе, что вы пропустили, это окружение вашего кода сохранением/освобождением объекта звездного неба (конечно, если вы не сохранили его дважды) - person Gargo; 12.06.2012