# Fullscreen langsamer als Window Mode



## Titanpharao (19. Mrz 2011)

Hallo liebes Forum,

ich wollte gerade für mein Java Spiel IMoY Wujinyou vielleicht kennen es noch ein paar Leute, einen FullScreen Modus einbauen.

Soweit so gut ... klappt auch, ok die JDialogs machen noch ein paar Probleme, aber die kann ich weg machen denke ich.

Z.z. gibt es eigentlich nur zwei Probleme, das eine ist wohl von mir verursacht, das andere verstehe ich nicht 

1. Wenn ich das Spiel minimiere, sind viele Texturen weg. Das sind alle meine VolatileImage Texturen. Ich habe schon gelesen, das man diese "reloaden" muss oder so ähnlich ... nur hatte ich das im Fenster Modus glücklicherweise nicht gebraucht  habe sie nur als diese geladen, da sie schneller sind ... denke ich 
Es fehlen auch ein paar VolatileImage Texturen wärend des Spiels schon, was noch komischer ist.

2. Das Hauptproblem ist aber die Performance! Da das ganze Spiel auf Events bassiert, kann ich keine FPS messen, aber es läuft einfach nur Sch****! Richtig langsam, teilweise "normal" dann wenn ich das Fenster beim laufen öffne und schließe ruckelt sich das Programm einen ab. Auch in Kämpfen mit Monstern ist es schrecklich langsam. Kann es sein, das durch den Fullscreen-Mode alle Buffering Strategien ausgeschalten wurden? Ich denke das Spiel passt eh nicht auf diesen Modus, aber viele Leute haben einen großen Monitor und wollen nicht so ein kleines Fenster 

Hier mal der Code, wie ich es erzeuge. Jemand eine Idee warum es soooo lahm ist? 

Danke für die Anworten.


```
public boolean switchToFullScreen(boolean fullScreenOn){
		boolean isFullScreen=device.isFullScreenSupported();
		setUndecorated(isFullScreen);
		if(isFullScreen){
			device.setFullScreenWindow(this);
	        DisplayMode dm = new DisplayMode(720,576,32,60);
	        try{
	        	device.setDisplayMode(dm);
			}catch(Exception e){
				isFullScreen=false;
			}
			validate();
		}
		return isFullScreen;
	}
```


----------



## Empire Phoenix (19. Mrz 2011)

DisplayMode dm = new DisplayMode(720,576,32,60);

Evtl unterstützt die Hardware diese auflösung nicht nativ und emuliert? versuch einfach mal ne standart auflösung mit schwarzem rand zum vergleich.


----------



## Titanpharao (19. Mrz 2011)

War eine Idee Wert, bringt aber nichts. Es läuft halt im allgemein etwas langsamer und wenn man die Spiel Menu's öffnet, und dabei läuft ruckelt es soo stark, wo es im Window gar nicht ruckelt und absolut flüssig läuft ...


----------



## Titanpharao (19. Mrz 2011)

Ok ich habe das Problem jetzt lokalisiert.

Es liegt an den VolatileImages im FullScreen Modus :S Jetzt bin ich leider etwas verwirrt ... dachte die sind "schneller" 

Oder ich wende sie falsch an. Ich lade mir eigentlich ein Bild in ein VolatileImage und Graphics.draw es dann auf ein JPanel.

Dieses ist im Fenster Modus schnell, aber im Fullscreen doppelt so langsam.
Eigentlich sollte das zeichnen der Welt gar keine Zeit benötigen, so wie im Fenster Modus, aber im Fullscreen brauch es überall länger, auch via BufferedImages auch wenn es da nur eine Steigerung von 202 auf 276 ist es trotzdem 25% langsamer. Liegt es einfach daran, das jetzt "1440x900" anstelle von 576x576 gerendert werden? Obwohl meine Settings ja 720x576 sagen :S

Hier hat jemand ein ähnliches Problem, kann nur die Lösung nicht richtig deuten bzw ist keine angegeben ... Drawing VolatileImages is slower in fullscreen mode?


----------



## Eldorado (19. Mrz 2011)

Offtopic: Warum kann man das Spiel eigentlich nur über eine exe starten? Mir würde als Linuxer eine jar-Datei wesentlich besser gefallen  Oder finde ich die jar-Datei einfach nicht?


----------



## eRaaaa (19. Mrz 2011)

Eldorado hat gesagt.:


> Mir würde als Linuxer eine jar-Datei wesentlich besser gefallen  Oder finde ich die jar-Datei einfach nicht?



Benenne die .exe einfach zu .jar um


----------



## Eldorado (19. Mrz 2011)

Das wäre für mich dann vielleicht schön, aber ich glaube damit wäre mein PC nicht glücklich und deswegen wäre ich dann auch wieder nicht zufrieden 

Edit: Ok, dachte das wäre nur ein Scherz gewesen. Dachte eigentlich exe und jar sind unterschiedlich aufgebaut...aber diesmal wohl nicht


----------



## Titanpharao (20. Mrz 2011)

Nein das ist eine Gewrappte Exe um die normalos nicht abzuschrecken  Jars machen manchmal mit andern programmen Probleme. Nokia irgendwas z.B.

Aber schön das du es somit starten kannst  Hinterlasse doch ein Comment im Forum ^_^


Nagut dann arbeite ich mal weiter am neuen Release für morgen.


----------



## Titanpharao (21. Mrz 2011)

So der Release ist draußen, update News gibts auf der News Seite ...

Habs jetzt mit Fullscreen raus gebracht, aber so richtig glücklich hat er mich nicht gemacht.
Habe alle VolatileImages durch normale Images wieder ersetzt, aber es läuft immer noch ~25-50% schlechter als im Fenster :S


----------



## Antoras (21. Mrz 2011)

Hab zwar keine Ahnung wo der Fehler sein könnte, aber vllt. bringt es was wenn du ein KSKB baust. Dann sieht man vllt. ob du einen groben Schnitzer im Codeaufbau hast.


----------



## Titanpharao (22. Mrz 2011)

Naja, das mit dem KSKB wird nicht viel bringen ... der Code ist eh viel zu groß dafür. 

Aber ich weis genau, das der Repaint Befehl der "Welt" am längsten dauert. Im Fenster Modus 0ms und im Vollbild schwankend zwischen 3-10ms! pro aufruf! Brauch dern ImageObserver für Fullscreen oder sowas ... da is doch was faul


----------



## Empire Phoenix (22. Mrz 2011)

Wie wärs mit pseudo fullscreen?

Mach nen fenster inner größe des bildschirms und dann always on top und ohne dekorations.


----------



## Titanpharao (22. Mrz 2011)

Das wäre ja kein 576x576 Pixel @ 22" Monitor Fullscreen.

Das Fenster wird ja gescretscht auf die "hohe" Auflösung des Monitors, wenn man ein altes 2D in 640x480 spielen würde.

Darum gings mir aber ... sonst könnte man eh Fenster lassen, ist eh mehr für Schule & langweilige Arbeitstage gedacht ^.-


----------



## Tokolosh (23. Mrz 2011)

Hallo, ich habe ein vergleichbares Problem. Im Fenstermodus läuft es schnell genug, aber sobald ich im Vollbild bin kommt es mir vor als ob immer wieder einige wenige Frames übersprungen werden bzw. merkt man eben das stehenbleiben des Sprites. Zwar nur kurz, aber bemerkbar. Besonders bei Standanimationen. Wie hast du das Problem genau gelöst?????


----------



## Titanpharao (24. Mrz 2011)

Ebene noch gar nicht ... benutzt dein Spiel Aktiv oder Passiv Rendering? Meins passiv, weis nicht ob es damit zusammenhängt, kanns aber eigentlich nicht, da der "Repaint" aufruf, die Zeit verfrisst und da kann ich ja nichts mehr machen ...


----------



## Tokolosh (24. Mrz 2011)

Im Moment noch passiv, bin aber dabei umzustellen. Mal schauen ob es dann flüssiger läuft.


----------

