Как приостановить / возобновить CCParticleSystem в Cocos2D-iPhone?

#iphone #cocos2d-iphone #particle-system

#iPhone #cocos2d-iphone #система частиц

Вопрос:

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

Как я могу это сделать?

Я знаю, что могу использовать [ParticleSystem unscheduleUpdate] и [ParticleSystem scheduleUpdate], но как я могу проверить, запланировано ли обновление?

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

ParticleSystem.active, похоже, не дает мне желаемого флага, чтобы проверить, обновляется ли система или нет…

Чего мне здесь не хватает?

Ответ №1:

Вы не должны планировать или отменять метод обновления системы частиц или любого другого внутреннего класса, если на то пошло. Проблема в том, что могут быть другие запланированные методы (т. Е. Запланированные с приоритетом или интервалом), которые затем будут продолжать работать.

Вместо этого вы должны использовать pauseTarget и resumeTarget класса CCScheduler для приостановки / возобновления обновлений экземпляра класса:

 [[CCScheduler sharedScheduler] pauseTarget:particleSystem];
[[CCScheduler sharedScheduler] resumeTarget:particleSystem];
  

Это приостановит / возобновит все запланированные методы, а не только обычный метод обновления.

Вы также можете проверить, приостановлены ли запланированные методы цели:

 [[CCScheduler sharedScheduler] isTargetPaused:particleSystem];
  

Комментарии:

1. Большое спасибо! Вы всегда очень полезны 🙂 Однако я еще не заставил его работать. Я запускаю эту проверку, но она продолжает срабатывать все время: if([[CCScheduler sharedScheduler] isTargetPaused: ParticleSystem] == NO) { [[CCScheduler sharedScheduler] pauseTarget: ParticleSystem]; NSLog(@»ОСТАНОВЛЕННАЯ СИСТЕМА ЧАСТИЦ»); } Редактировать: почему я не могу отформатировать этокомментарий? Теперь я выгляжу глупо.

2. Я полагаю, что в самом первом кадре все запланированные цели будут установлены как приостановленные. Попробуйте запустить это в методе обновления или onEnter. Комментарии AFAIK не поддерживают форматирование.

Ответ №2:

Другим трюком, который я использовал, была функция setEmissionRate() . Чтобы приостановить систему частиц:

setEmissionRate(0);

Чтобы возобновить систему частиц:

setEmissionRate(последнее значение);

Я надеюсь, что это должно быть хорошо для вас 🙂

Комментарии:

1. Это работает хорошо, особенно если вы хотите, чтобы транзит проходил гладко. Спасибо