Многочастичные системы в cocos2d

Интересно, о какой дороге я должен идти с ParticleSystem. В этом конкретном случае я хочу создать 1-20 небольших взрывов одновременно, но с разными позициями. Сейчас я создаю новый ParticleSystem для каждого взрыва, а затем его выпускаю, но, конечно, это очень наказывает производительность.

Мой вопрос: есть ли способ создать один ParticleSystem с несколькими источниками излучения. Если нет, я должен создать массив ParticleSystem в init, а затем использовать бесплатный, когда требуется взрыв? Или есть другой подход, о котором я не думал?

Ответы

Ответ 1

отправьте ccparticleexamples.m в свою библиотеку cocos2d.

Это поможет показать различные типы эмиттеров частиц.

Ответ 2

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

Я использую категорию для добавления методов [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 для всех эффектов частиц.

Ответ 3

Ну, так как никакой помощи не было найдено, я решил ее так, как я считал лучшим. Я создал массив Partlesystems.

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

ParticleSystem * ps = [EnemyExplosions objectAtIndex: EnemyExplosionPointer ++]; ps.position = ExpPoint; [ps resetSystem];

Ответ 4

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