Несколько ParticleSystems в cocos2d - PullRequest
14 голосов
/ 16 июля 2009

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

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

Ответы [ 4 ]

4 голосов
/ 26 ноября 2010

см. Ccparticleexamples.m в вашей библиотеке cocos2d.

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

1 голос
/ 27 апреля 2010

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

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

0 голосов
/ 26 февраля 2010

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

0 голосов
/ 24 июля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...