14

私はどの道を進むべきか迷っていParticleSystemます。この特定のケースでは、同時に 1 ~ 20 個の小さな爆発を作成したいと考えていますが、位置は異なります。現在、ParticleSystem爆発ごとに新しいものを作成してからリリースしていますが、もちろん、これはパフォーマンスに非常に悪影響を及ぼします.

私の質問は次のとおりですParticleSystem。複数の放射源を持つものを作成する方法はありますか。そうでない場合はParticleSystem、 init の配列を作成し、爆発が必要なときに無料の配列を使用する必要がありますか? または、私が考えていなかった別のアプローチがありますか?

4

4 に答える 4

4

cocos2d ライブラリの ccparticleexamples.m を参照してください。

さまざまなタイプのパーティクル エミッターを示すのに役立ちます。

于 2010-11-26T13:11:27.157 に答える
1

エフェクトの種類ごとに単一のパーティクル システムを使用します。つまり、1 つは炎の効果用、1 つは輝き用、もう 1 つは爆発用などです。

カテゴリを使用して [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 カウンターですべてのパーティクル エフェクトに使用されています。

于 2010-04-27T17:01:18.457 に答える
0

さて、助けが見つからなかったので、私は自分が最善だと思った方法でそれを解決しました。Partlesystemsの配列を作成しました。

一度にいくつかのポイントで爆発が必要になったとき、私は基本的にこれを行いました:

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

于 2009-07-24T06:07:49.263 に答える
0

単一の に対して複数のソースを作成できるかどうかはわかりませんParticleSystemが、2 番目の解決策 ( の配列を作成するParticleSystem) は、この種の問題を解決するための優れた一般的な解決策です。を再初期化できる限りParticleSystem、インスタンス化コストやメモリの断片化などの他のオーバーヘッドを回避できます。

于 2010-02-26T01:35:55.247 に答える