# Spiel laggt trotz 90 FPS (bei der Anzeige)



## Devil0s (11. Jul 2012)

Ich habe versucht ein kleines Spiel zu schreiben (grossteils nach dem Tutorial von Quaxli).
Ich hab jetzt einmal einen Spieler, den man steuern kann und dann noch Gegner.
Die Gegner koennen noch nichts, ausser herumlaufen (Wie die Wolken. Wer das Tutorial kennt.).
Aber wenn ich jetzt das Spiel starte und ich meinen Character steuern will dann laggt es einfach nur extrem. Weder der Spieler noch die Gegner bewegen sich fluessig.
Ich habe auch eine FPS-Anzeige eingebaut (auch nach dem Tutorial), aber die zeigt stetig 90 FPS an.

Ich hoffe ich koennt mir weiterhelfen.
Anbei das Programm als Jar und der Sourcecode.

Devil0s


----------



## Fu3L (12. Jul 2012)

Das was du im GameLoop misst, ist nicht das gleiche wie die Anzahl der Neuzeichnungen. repaint() legt nur eine bitte für einen anderen Thread ab. Vielleicht machst du beim Zeichnen etwas sehr aufwendiges? Zum Beispiel unoptimierte BufferedImages malen?


----------



## Devil0s (12. Jul 2012)

Wie optimiert man denn BufferedImages am besten??


----------



## Fu3L (12. Jul 2012)

Entweder in etwa so wie Quaxlie es mit dem "GraphicsEnvironment" macht oder nach Marcos Analyse:

http://www.java-forum.org/spiele-multimedia-programmierung/120318-performance-bufferedimages.html

Solltest du allerdings irgendwie Rotationen oder ähnliches mit Graphics2D machen wird das eher der Flaschenhals sein.


----------



## Marco13 (12. Jul 2012)

Aua... hast du dir mal die Konsole angesehen? Dort fliegen zig-tausende von ArrayIndexOutOfBoundsExceptions....

In der Sprite.java sollte es nicht
if(currentpic > pics.length) 
sondern
if(currentpic >= pics.length) 
heißen... vielleicht hilft das schon


----------



## Devil0s (12. Jul 2012)

Ok. Danke ihr beiden. Ich werde mich später mal ransetzen. 
Das mit den ganzen "Errors" ist mir auch aufgefallen.
Aber ich wollte vor der Problemlösung erstmal ein bisschen weitermachen. 
Deine Lösung macht Sinn. Sollte funktionieren. Schade, dass das mir nicht aufgefallen ist. 
Solche Kleinigkeiten können ja die größten Fehler verursachen


----------



## Bile Demon (12. Jul 2012)

Devil0s hat gesagt.:


> [...]dann laggt es einfach nur extrem. Weder der Spieler noch die Gegner bewegen sich fluessig.
> Ich habe auch eine FPS-Anzeige eingebaut[...]



Nur eine Vermutung, aber vielleicht kann mich da jemand berichtigen, wenn ich falsch liege:

Kann es sein, dass die Generation Counterstrike den Unterschied zwischen einem Lag und einem gewöhnlichen Ruckeln nicht kennt? Ist mir schon mehrfach hier im Gamedev-Forum aufgefallen, dass die Begriffe synonym verwendet werden.

Ein Ruckeln ist doch eine reine Grafiksache, z.B. wenn die Position der Spielfigur nicht oft genug aktualisiert wird, oder das Bild aus Performance-Gründen nicht oft genug gezeichnet werden kann.
Ein Lag kann dagegen z.B. ein Input-Lag sein, oder durch einen Engpass bei der Datenübertragung im Netzwerk entstehen, also eine zeitliche Verzögerung zwischen Aktion des Spielers auf der Tastatur und Reaktion der Spielfigur.


----------



## Noctarius (12. Jul 2012)

Bile Demon hat gesagt.:


> Nur eine Vermutung, aber vielleicht kann mich da jemand berichtigen, wenn ich falsch liege:
> 
> Kann es sein, dass die Generation Counterstrike den Unterschied zwischen einem Lag und einem gewöhnlichen Ruckeln nicht kennt? Ist mir schon mehrfach hier im Gamedev-Forum aufgefallen, dass die Begriffe synonym verwendet werden.
> 
> ...



Ja ich kenne dieses Problem mit der Verwendung als Synonym für jede Art von "Verzögerung" auch. Würde dir mit der Vermutung tatsächlich zustimmen ;-)


----------



## bone2 (12. Jul 2012)

[OT]das nennt man ruckeln (niedrige fps) und nicht laggen (hoher ping)[/OT]


----------



## Devil0s (12. Jul 2012)

Marco13 hat gesagt.:


> Aua... hast du dir mal die Konsole angesehen? Dort fliegen zig-tausende von ArrayIndexOutOfBoundsExceptions....
> 
> In der Sprite.java sollte es nicht
> if(currentpic > pics.length)
> ...



Vielen vielen Dank.
Deine Loesung beseitigt alle Errors und das Game laeuft wieder fluessig.


----------

