2009-07-16 2 views
14

ParticleSystem과 함께해야 할 길은 궁금합니다. 이 특별한 경우에, 나는 같은 위치에서 다른 시간에 1-20 개의 작은 폭발물을 만들고 싶다. 지금은 각 폭발에 대해 새로운 ParticleSystem을 생성하고 출시하지만, 물론 이것은 성능에 매우 부담이됩니다.cocos2d의 여러 입자 시스템

내 질문에 : 하나의 광원을 복수로 생성하는 ParticleSystem을 만드는 방법이 있습니까? 그렇지 않다면 init에 ParticleSystem의 배열을 만들고 폭발이 필요할 때 무료로 사용해야합니까? 아니면 제가 생각하지 못했던 또 다른 접근법이 있습니까?

+0

이 질문이 너무 구체적이라고 생각합니다. 나는 Cocos2d의 제작자에게 물어볼 것입니다. –

+0

모두가 해결 했습니까? 그렇게하는 가장 좋은 방법은 무엇입니까? – mm24

답변

0

글쎄, 아무 도움도 발견되지 않았기 때문에 나는 생각했던 방식으로 그것을 해결했다. 나는 Partlesystems의 배열을 만들었다. 내가 basicly 이런 짓을 한 번에 여러 지점에서 폭발이 필요

:

파티클의 * PS = [EnemyExplosions objectAtIndex : EnemyExplosionPointer ++]; ps.position = ExpPoint; [ps resetSystem];

0

하나의 ParticleSystem에 대해 여러 소스를 만들 수 있는지 모르겠지만 (ParticleSystem의 배열 만들기) 두 번째 솔루션은 이러한 종류의 문제를 해결하는 좋은 방법입니다. ParticleSystem을 다시 초기화 할 수 있다면 인스턴스화 비용 및 메모리 조각화와 같은 다른 오버 헤드를 피할 수 있습니다.

1

각 효과 유형에 단일 입자 시스템을 사용합니다. 따라서 화재 효과, 불꽃, 폭발 등을위한 것입니다.

카테고리를 사용하여 다음과 같은 기본 Cocos2D 파티클 시스템에 [enable] 및 [disable] 메소드를 추가합니다.

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에서 사용 중입니다.

4

은 cocos2d 라이브러리의 ccparticleexamples.m을 참조하십시오.

다양한 유형의 입자 이미 터를 표시하는 데 도움이됩니다.