2

現在、Cocos2D でゲームを作成していますが、最適化するためにいくつかのパーティクル システムを一時停止/再開する必要があります。

これどうやってするの?

[particleSystem unscheduleUpdate] と [particleSystem scheduleUpdate] を使用できることは承知していますが、更新が既にスケジュールされているかどうかを確認するにはどうすればよいですか?

画面外にあるすべてのパーティクル システムを一時停止し、ビューに戻ったら再開したいので、ビューポートを移動するときにパーティクル システムをループします。

システムが更新されているかどうかを確認するためのフラグが、particleSystem.active から得られないようです...

ここで何が欠けていますか?

4

2 に答える 2

4

パーティクル システムの update メソッドやその他の内部クラスをスケジュールしたりスケジュール解除したりしないでください。これに関する問題は、他のスケジュールされたメソッド (つまり、優先度または間隔でスケジュールされた) が実行され続ける可能性があることです。

代わりに、CCScheduler クラスの pauseTarget と resumeTarget を使用して、クラス インスタンスの更新を一時停止/再開する必要があります。

[[CCScheduler sharedScheduler] pauseTarget:particleSystem];
[[CCScheduler sharedScheduler] resumeTarget:particleSystem];

これにより、通常の更新方法だけでなく、スケジュールされたすべての方法が一時停止/再開されます。

ターゲットのスケジュールされたメソッドが一時停止されているかどうかを確認することもできます:

[[CCScheduler sharedScheduler] isTargetPaused:particleSystem];
于 2011-11-03T15:44:06.197 に答える
1

私が使用したもう 1 つのトリックは、setEmissionRate() 関数です。パーティクル システムを一時停止するには:

setEmissionRate(0);

パーティクル システムを再開するには:

setEmissionRate(latestValue);

これがあなたにとって良いことであることを願っています:)

于 2014-08-10T19:37:23.087 に答える