2D Spiel im Vollbild langsamer als im Fenster

scari

Mitglied
Hallo!

ich habe mir von Quaxli dieses Tuorial angeguckt und ein kleines 2D Spiel programmiert.
http://www.java-forum.org/spiele-multimedia-programmierung/54795-quaxli-2d-spiele-tutorial.html

Ich nutze dort ein JPanel und zeichne darauf mit der Methode paintComponent. Habe dort auch eine run() Methode implementiert um mein Panel alle 10ms neuzuzeichnen(repaint). Es funktioniert im Fenstermodus alles wunderbar, ohne irgendwelche Ruckler usw. Sobald ich aber mit diesem Code

Java:
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice device;

        device = ge.getDefaultScreenDevice();
        if(device.isFullScreenSupported())
        {
            device.setFullScreenWindow(this);
            device.setDisplayMode(new DisplayMode( 1280, 1024 , 32, 60));
        }

in den Fullscreenmode wechsel, ist alles langsamer und träge. Die Bewegungen sind nicht mehr flüssig.
Woran kann das liegen? Ich hab jetzt bewusst darauf verzichtet meinen Code zu posten, da es zu viel wäre.
Viele Dank schon mal.
 

jule37

Aktives Mitglied
gib mal die fps auf dem bildschirm aus. gibt es einen unterschied zwischen fenster und vollbild?

allgemein habe ich mit java2d, was performance betrifft, schlechte erfahrungen gemacht. du solltest dir vielleicht lieber mal opengl anschauen. noch besser: gleich eine game engine, wie z.B. jmonkey, benutzen.
 

scari

Mitglied
Die FPS bleibt komischerweise gleich, obwohl da alles langsamer ist. Eine fertige Game Engine darf ich leider nicht benutzen, da das ein Projekt für die Schule ist. Kann es sein, dass es etwas mit der repaint() Methode zu tun haben könnte? Habe desöfteren im Netz was von Active Rendering gehört, wo man diese Methode vermeidet. Aber im Fenster läuft ja alles super :bahnhof:
 

jule37

Aktives Mitglied
wenn die fps exakt gleich sind sollte eigtl. alles in ordnung sein.

der nächste schritt, den ich jetzt tun würde ist profilen. d.h. alle möglichen vorgänge messen. wie lange dauert update, wie lange draw, etc - gibt es unterschiede zwischen windowed und fullscreen? es kann auch helfen mal im debugmodus durchzusteppen. zumindest gibt es keinen weg daran vorbei den gesamten prozess bis ins kleinste detail zu verstehen, dann findet man den fehler irgendwann garantiert.

du könntest zusätzlich mal deinen game loop posten mit update und draw, dann schaue ich mal ob mir was auffällt.

allgemeine probleme mit java2d im fullscreen exclusive sind mir nicht bekannt. grundsätzlich muss das gehen, also ist höchst wahrscheinlich bei dir im code ein fehler.
 

Fu3L

Top Contributor
Es könnte doch sein, dass du sagst, sagen wir ein Ball, sei 10 px pro Sekunde unterwegs.
Wenn dein Fenster normal 500x500 groß ist, legt der Ball in 50 Sekunden seinen Weg über das Spielfeld zurück, bei Vollbild mit 1920xwattweißich pixeln braucht er halt annähernd 200 Sekunden.

Obwohl ich das in meinem BreakoutKlon abfange, empfinde ich es aber auch auf einem riesen Bildschirm etwas ruckelnd... Kann sein, dass dann nich oft genug neu gezeichnet wird oder irgendwas Psychologisches^^
 

scari

Mitglied
Es könnte doch sein, dass du sagst, sagen wir ein Ball, sei 10 px pro Sekunde unterwegs.
Wenn dein Fenster normal 500x500 groß ist, legt der Ball in 50 Sekunden seinen Weg über das Spielfeld zurück, bei Vollbild mit 1920xwattweißich pixeln braucht er halt annähernd 200 Sekunden.

Obwohl ich das in meinem BreakoutKlon abfange, empfinde ich es aber auch auf einem riesen Bildschirm etwas ruckelnd... Kann sein, dass dann nich oft genug neu gezeichnet wird oder irgendwas Psychologisches^^

Ne daran liegt das nicht, habe das Fenster vorübergehend auf den ganzen Bildschirm skaliert. Der Unterschied ist schon deutlich.

wenn die fps exakt gleich sind sollte eigtl. alles in ordnung sein.

der nächste schritt, den ich jetzt tun würde ist profilen. d.h. alle möglichen vorgänge messen. wie lange dauert update, wie lange draw, etc - gibt es unterschiede zwischen windowed und fullscreen? es kann auch helfen mal im debugmodus durchzusteppen. zumindest gibt es keinen weg daran vorbei den gesamten prozess bis ins kleinste detail zu verstehen, dann findet man den fehler irgendwann garantiert.

du könntest zusätzlich mal deinen game loop posten mit update und draw, dann schaue ich mal ob mir was auffällt.

allgemeine probleme mit java2d im fullscreen exclusive sind mir nicht bekannt. grundsätzlich muss das gehen, also ist höchst wahrscheinlich bei dir im code ein fehler.

Danke für den Tipp. Ich habe mal ein neues leeres Projekt mit dem Grundgerüst(gameloop, draw) von meinem Spiel als Basis genommen und dann in den Vollbildmodus gewechselt. Selbst die Maus hat da etwas geruckelt. Jedenfalls liegts diesem Konstrukt hier:

Java:
    @Override
    public void run() 
    {
        while(this.isVisible())
        {

                delta = System.nanoTime() - last;
                last = System.nanoTime();
                fps = ((long) 1e9)/delta;

                if (isRight)
                {
                    x+= velocity * (delta/1e9);
                    System.out.println(x);
                }
            
            repaint();
            
            try
            {
                Thread.sleep(10);
            }
            catch(Exception ex)
            {

            }
       }
    }

Und zwar die While Schleife ist das Probelm. Lasse ich sie weg, ruckelt da nichts mehr. Nur wie kann ich das jetzt umschreiben? :bahnhof: Ich brauch ja unbedingt eine Schleife um alles zu aktualisieren.
Die run Methode ist in meinem JPanel. Dieser wird dann in einem neuen Thread gestartet.
 

andre111

Bekanntes Mitglied
Naja, das repaint zeichnet nicht direkt sondern veranlasst soweit ich weis nur das Fenster in nächster Zeit gerendert zu werden. Wenn zu viele repaints schnell hintereinander kommen werden ein paar ignoriert/"zusammengefasst", wenn ich mich nicht irre. Dementsprechend sind die berechneten FPS zwar gleich, aber wie oft wirklich gezeichnet wird könnte sich zwischen Vollbild und Fenster Modus durchaus unterscheiden
 

scari

Mitglied
Naja, das repaint zeichnet nicht direkt sondern veranlasst soweit ich weis nur das Fenster in nächster Zeit gerendert zu werden. Wenn zu viele repaints schnell hintereinander kommen werden ein paar ignoriert/"zusammengefasst", wenn ich mich nicht irre. Dementsprechend sind die berechneten FPS zwar gleich, aber wie oft wirklich gezeichnet wird könnte sich zwischen Vollbild und Fenster Modus durchaus unterscheiden

OK danke für die Info. Wie kann ich denn eine Methode schreiben(statt repaint), die das Panel immer veranlasst, alle 10ms zu zeichnen?
 

jule37

Aktives Mitglied
folgendes problem: deine sleep-zeit ist konstant 10 milliesekunden. dadurch schläft der thread nach jedem frame 10ms, selbst wenn er dafür keine zeit hat, weil das zeichnen zu lange dauert. versuche die sleep zeit so zu berechnen, dass sie der gewünschten framerate entspricht. wenn der frame zu lange gebraucht hat, dann kein sleep, sonst wirfst du wertvolle zeit zum fenster raus ;)

ansonsten findest du hier ausführliche allgemeine informationen
Lesson: Full-Screen Exclusive Mode API (The Java™ Tutorials > Bonus)

noch ein hinweis: fps = 1 / renderzeit pro frame (in sekunden)
 

andre111

Bekanntes Mitglied
Das Zeichnen passiert aber nicht in dem Thread, in dem scari repaint() aufruft, da das repaint() nicht sofort neu zeichnet sondern nur in die AWT/Swing-EventQueue ein Event einreiht, das das Neuzeichnen "in näherer" Zukunft auslöst. Dazu sollte die Dokumentation für aktives und passives Rendering weiterhelfen: Passive vs. Active Rendering (The Java™ Tutorials > Bonus > Full-Screen Exclusive Mode API)
So auch laut Byte-Welt-Wiki:
Der Aufruf der repaint Methode veranlasst indirekt den Aufruf der paintComponent Methode der angesprochenen Komponente, und zwar zu dem für das System am geeignetsten Zeitpunkt.
 

scari

Mitglied
Das Zeichnen passiert aber nicht in dem Thread, in dem scari repaint() aufruft, da das repaint() nicht sofort neu zeichnet sondern nur in die AWT/Swing-EventQueue ein Event einreiht, das das Neuzeichnen "in näherer" Zukunft auslöst. Dazu sollte die Dokumentation für aktives und passives Rendering weiterhelfen: Passive vs. Active Rendering (The Java™ Tutorials > Bonus > Full-Screen Exclusive Mode API)
So auch laut Byte-Welt-Wiki:

danke für den Link. Den Artikel versteh ich jedoch nicht ganz. Ich hab mal wie im Beispiel eine eigene Methode zum Rendern gemacht, die ich dann in der paintComponent aufrufe. Dabei verzichte auch noch auf das repaint(). Jetzt habe ich aber durch das while eine Endlossschleife und das Spiel läuft gar nicht mehr. Kann mir jemand vielleicht ein Beispiel posten? Danke.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Spiel als Vollbild starten mit Image als HIntergrund Spiele- und Multimedia-Programmierung 8
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
E Spiel neustarten Spiele- und Multimedia-Programmierung 4
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
V Basisprinzipien Breakout-Spiel Spiele- und Multimedia-Programmierung 8
E Spiel startet nach exportieren nicht Spiele- und Multimedia-Programmierung 7
Gossi Erweiterung von Quaxlis Heli-Spiel Spiele- und Multimedia-Programmierung 16

Ähnliche Java Themen

Neue Themen


Oben