爆発にパーティクルエフェクトを使用するlibGDXゲームを作成しています。これは新しい電話では非常にうまく機能しますが、古い電話(HTC Desireでテスト済み)では、画面で爆発が数回以上発生すると、fpsが大幅に遅れます。
私が現在検討している2つのオプションがあります。
エフェクトごとに多くのパーティクルがあるので、その数を減らすことはオプションかもしれませんが、一貫性と美的理由からではありません。
パーティクルエフェクトを実行して各フレームを保存することで生成されたアニメーションを使用します。これは見栄えがよく、一貫性があります。画像サイズに問題がある可能性があります。また、libGDXパーティクルの実装でこれをどのように実行できるかもわかりません。
何か案は?
編集: コードのいくつかのスニペット:Assetsクラスにエフェクトをロードした後:
particleFire.load(Gdx.files.internal("explosion.p"),Gdx.files.internal(""));
パーティクルエフェクトを発射物オブジェクトのコンストラクターにロードします。最適化の候補であることがわかっているメインレンダリングループでこのオブジェクトの作成を行っています。
explosion = new ParticleEffect(Assets.particleFire);
レンダリングスレッドでは、このメソッドを呼び出して効果を描画します。
private void drawBlasts(float delta){
for(Missile projectile : world.missiles){
if (projectile.missileState == State.EXPLODING){
if(projectile.stateTime==0.0f) {
projectile.explosion.start();
continue;
}
projectile.explosion.setPosition(projectile.position.x, projectile.position.y);
projectile.explosion.draw(spriteBatcher, delta);
}
}
}
爆発のスニペット.p
- Delay -
active: false
- Duration -
lowMin: 1000.0
lowMax: 1000.0
- Count -
min: 0
max: 100
- Emission -
lowMin: 0.0
lowMax: 0.0
highMin: 250.0
highMax: 250.0
relative: false
scalingCount: 1
scaling0: 1.0
timelineCount: 1
timeline0: 0.0
- Life -
lowMin: 800.0
lowMax: 800.0
highMin: 1000.0
highMax: 1000.0
relative: false
scalingCount: 3
scaling0: 1.0
scaling1: 1.0
scaling2: 1.0
timelineCount: 3
timeline0: 0.0
timeline1: 0.66
timeline2: 0.9931507
編集2:これらの効果は相加的であるため、かなりのブレンドも行われています。