Ответ 1
отправьте ccparticleexamples.m в свою библиотеку cocos2d.
Это поможет показать различные типы эмиттеров частиц.
Интересно, о какой дороге я должен идти с ParticleSystem
. В этом конкретном случае я хочу создать 1-20 небольших взрывов одновременно, но с разными позициями. Сейчас я создаю новый ParticleSystem
для каждого взрыва, а затем его выпускаю, но, конечно, это очень наказывает производительность.
Мой вопрос: есть ли способ создать один ParticleSystem
с несколькими источниками излучения. Если нет, я должен создать массив ParticleSystem
в init, а затем использовать бесплатный, когда требуется взрыв? Или есть другой подход, о котором я не думал?
отправьте ccparticleexamples.m в свою библиотеку cocos2d.
Это поможет показать различные типы эмиттеров частиц.
Я использую одну систему частиц для каждого типа эффекта. Итак, один для эффекта огня, один для блеска, один для взрыва и т.д.
Я использую категорию для добавления методов [enable] и [disable] к базовым системам частиц Cocos2D, которые выглядят следующим образом:
ParticleEnhancement.h
#include "cocos2d.h"
@interface CCParticleSystem (particleEnhancement)
-(void)enable;
-(void)disable;
@end
ParticleEnhancement.m
#import "ParticleEnhancement.h"
@implementation CCParticleSystem (particleEnhancement)
-(void)enable {
active = YES;
elapsed = 0.0f;
}
-(void)disable {
active = NO;
}
@end
Затем, когда я хочу вызвать его, я просто устанавливаю позицию и вызываю. Система частиц будет порождать кучу частиц на основе настроек инициализации. Система может запускаться несколько раз в разных положениях, и ранее созданные частицы будут вести себя правильно.
Главное, чтобы рассмотреть, что вам понадобится больший бюджет частиц для учета нескольких экземпляров данного эффекта с использованием единой системы.
Кроме того, это работает для "вызванных" эффектов, таких как взрыв, но может не так хорошо работать для долгого эффекта, как дымовая тропа. Я действительно не тестировал это.
Мне нравится делать это так, потому что это означает, что у меня меньше систем частиц, чтобы спорить, и мне не нужно иметь дело с созданием пула систем частиц. Сама система частиц хорошо справляется с обработкой пула частиц, не нужно повторять это снова на системном уровне.
Этот метод используется в моем приложении TCG Counter для всех эффектов частиц.
Ну, так как никакой помощи не было найдено, я решил ее так, как я считал лучшим. Я создал массив Partlesystems.
Когда мне понадобился взрыв в нескольких точках сразу, я в основном сделал это:
ParticleSystem * ps = [EnemyExplosions objectAtIndex: EnemyExplosionPointer ++]; ps.position = ExpPoint; [ps resetSystem];
Я не знаю, можете ли вы создать несколько источников для одного ParticleSystem
, но ваше второе решение (создание массива ParticleSystem
) является хорошим общим решением для решения этой проблемы. Пока вы можете повторно инициализировать ParticleSystem
, вы избежите любых других накладных расходов, таких как затраты на создание экземпляра и фрагментацию памяти.