Spiel laggt trotz 90 FPS (bei der Anzeige)

Devil0s

Aktives Mitglied
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
 

Anhänge

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?
 
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
 
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 😉
 
Zuletzt bearbeitet:
[...]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.
 
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.

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 ;-)
 
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

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

Zurück
Oben