2009-07-16 21 views
14

Tôi tự hỏi về con đường nào tôi nên đi với ParticleSystem. Trong trường hợp cụ thể này, tôi muốn tạo ra 1-20 vụ nổ nhỏ cùng một lúc nhưng với các vị trí khác nhau. Ngay bây giờ tôi đang tạo ra một ParticleSystem mới cho mỗi vụ nổ và sau đó thả nó ra, nhưng tất nhiên điều này là rất trừng phạt cho hiệu suất.Nhiều Particle hệ thống trong cocos2d

Câu hỏi của tôi là: Có cách nào để tạo một ParticleSystem với nhiều nguồn phát ra không. Nếu tôi không nên tạo một mảng ParticleSystem trong init và sau đó sử dụng một mảng miễn phí khi cần nổ? Hoặc là có một cách tiếp cận khác mà tôi đã không nghĩ đến?

+0

Tôi đoán câu hỏi này quá cụ thể. Tôi sẽ hỏi những người sáng tạo của Cocos2d. –

+0

mọi người đã giải quyết vấn đề này chưa? Đó là cách tốt nhất để làm như vậy? – mm24

Trả lời

0

Vâng, vì không tìm thấy trợ giúp, tôi đã giải quyết nó theo cách tôi nghĩ là tốt nhất. Tôi đã tạo một mảng các hệ thống Partles.

Khi tôi cần một vụ nổ tại một số điểm cùng một lúc tôi về cơ bản đã làm điều này:

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

0

Tôi không biết liệu bạn có thể tạo nhiều nguồn cho một đơn ParticleSystem hay không, nhưng giải pháp thứ hai của bạn (tạo một mảng ParticleSystem) là giải pháp chung tốt để giải quyết loại sự cố này. Miễn là bạn có thể khởi động lại ParticleSystem, bạn sẽ tránh được bất kỳ chi phí nào khác như chi phí khởi tạo và phân mảnh bộ nhớ.

1

Tôi sử dụng một hệ thống hạt đơn cho từng loại hiệu ứng. Vì vậy, một cho một hiệu ứng lửa, một cho một lấp lánh, một cho một vụ nổ, vv

Tôi sử dụng một danh mục để thêm [enable] và [disable] phương pháp cho các hệ thống hạt Cocos2D cơ sở như sau:

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 

Sau đó, khi tôi muốn kích hoạt nó, tôi chỉ cần đặt vị trí và gọi cho phép. Hệ thống hạt sẽ sinh ra một loạt các hạt dựa trên các thiết lập khởi tạo. Hệ thống có thể được kích hoạt nhiều lần ở các vị trí khác nhau và các hạt được tạo ra trước đây sẽ hoạt động đúng.

Điều chính cần xem xét là bạn sẽ cần một ngân sách hạt lớn hơn để giải thích cho nhiều trường hợp của một hiệu ứng đã cho bằng cách sử dụng một hệ thống duy nhất.

Ngoài ra, điều này làm việc cho các hiệu ứng "kích hoạt", như một vụ nổ nhưng có thể không hoạt động tốt cho một hiệu ứng chạy dài như đường mòn khói, tôi chưa thực sự thử nghiệm điều đó.

Tôi thích làm theo cách này bởi vì nó có nghĩa là tôi có ít hệ thống hạt hơn để xoay sở và tôi không phải đối phó với việc thiết lập một nhóm hệ thống hạt. Bản thân hệ hạt cũng là một công việc tốt để xử lý một nhóm các hạt, không cần sao chép lại một lần nữa ở mức hệ thống.

Kỹ thuật này đang được sử dụng trong ứng dụng của tôi TCG Counter cho tất cả các hiệu ứng hạt.

4

tham khảo ccparticleexamples.m trong thư viện cocos2d của bạn.

Nó sẽ giúp hiển thị các loại bộ phát hạt khác nhau.

Các vấn đề liên quan