#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. Это работает хорошо, особенно если вы хотите, чтобы транзит проходил гладко. Спасибо