Ich mache ein libGDX-Spiel, das Partikeleffekte für Explosionen verwendet. Das läuft auf neuen Handys recht gut, aber auf älteren Handys (getestet auf dem HTC Desire), wenn es mehr als ein paar Explosionen auf dem Bildschirm gibt, liegen die fps ziemlich weit zurück.Partikeleffekte für langsamere Telefone optimieren
Es gibt zwei Optionen, die ich zur Zeit bin Berücksichtigung
viele Teilchen pro Effekt Es gibt so die zählen zu reduzieren kann eine Option sein, aber ich möchte lieber nicht auf Konsistenz und ästhetischen Gründen.
Verwenden einer Animation, die durch Ausführen des Partikeleffekts und Speichern der einzelnen Frames generiert wird. Das würde gut aussehen und wäre konsistent. Es können Probleme mit der Bildgröße auftreten. Ich kann auch nicht sehen, wie dies mit der libGDX-Partikelimplementierung gemacht werden kann.
Irgendwelche Ideen?
EDIT: Einige Schnipsel des Codes: Nachdem die Wirkung in der Assets Klasse Laden:
particleFire.load(Gdx.files.internal("explosion.p"),Gdx.files.internal(""));
lade ich den Partikeleffekt im Konstruktor des Projektils Objekts. Ich mache diese Objekterstellung in der Hauptrendering-Schleife, von der ich weiß, dass sie ein Kandidat für die Optimierung ist.
explosion = new ParticleEffect(Assets.particleFire);
Im Rendering-Thread wird diese Methode aufgerufen, um die Effekte zu zeichnen.
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);
}
}
}
Ein Ausschnitt von explosion.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
EDIT 2: Diese Effekte additiv sind, so gibt es ein gutes Stück des Mischens zu geht.
Ich habe das OP aktualisiert. Es gibt einige offensichtliche Optimierungen bei der Objekterstellung, die mir bekannt sind, aber ich denke nicht, dass sie das Problem sind. Frame-Rate wird ein Problem bei 8 oder 9 auf Bildschirm-Effekte mit einem Samsung Galaxy s. Ca. 5 auf einem HTC Desire. – barconr
Ich habe mein OP aktualisiert – LiamJPeters