Fullscreen Mode und Canvas

Hi,
habe ein kleines Spiel mit Hilfe eines Tutorials erstellt und wollte jetzt nachträglich noch etwas rumspielen. Hab mir gedacht ich könnte das Ding mal im Fullscreen Mode laufen lassen. Allerdings bekomm ich da nur ein schwarzes Bild mit Mauszeiger. Maus kann ich bewegen, allerdings wird nicht bis zum Bildschirmrand. Liegt möglicherweise auch an der Auflösung von 600x800. So, hier mal der Code-Ausschnitt:

Java:
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();

Frame f = new Frame(gd.getDefaultConfiguration());
gd.setFullScreenWindow(f);
        if (gd.isDisplayChangeSupported()) {
        gd.setDisplayMode(new DisplayMode(800, 600, gd.getDisplayMode().getBitDepth(),  
                                  gd.getDisplayMode().getRefreshRate()));
        }

f.add(this);
f.setBackground(Color.black);
f.pack();
f.setVisible(true);

Das ganze befindet sich im Konstruktor der Klasse, die von Canvas abgeleitet ist.
Also : WIDTH und HEIGHT des Canvas liefern mir den Wert 1. Habe auch schon
Java:
w = gd.getDisplayMode().getWidth();
h = gd.getDisplayMode().getHeight();
this.setPreferredSize(new Dimension(w, h));

ausprobiert.

Mit
Java:
f.setExtendedState(Frame.MAXIMIZED_BOTH);
funktionierts, allerdings ist das dann nur die Desktop Auflösung oder?

Ich zeichne dann die Inhalte in der paint() Methode.

Kann mir wer weiterhelfen?

[Edit]
Hätte gleich noch ne andere Frage und will jetzt keinen neuen Beitrag aufmachen.
Also, hab noch ein bissl rumgespielt und mal mit
Java:
System.setProperty("sun.java2d.opengl", "true");
opengl aktiviert, allerdings bekomm ich da auch nur ein schwarzes Bild. Reicht das dann nicht wenn
ich einfach Graphics2D benutze? Was kann da noch falsch sein?

Und noch ne Frage zum Schluss:
Wenn ich ein 2D Spiel programmieren will mit Hardwareunterstützung, benutze ich dann Java 2D (also so wie oben erwähnt mit Graphics2D und dann Opengl einschalten(wenns denn so überhaupt funktioniert) oder programmiert man dann mit JOGL?
Für mich als Einsteiger ist JOGL noch etwas kompliziert. Ich frage mich halt obs nötig ist für 2D Spiele. Habe jetzt schon mehrere Spiele Tutorials durchgemacht (ganz normal JavaSE), aber irgendwie läuft das nie so richtig flüssig.
 
Zuletzt bearbeitet:

Friedhelm

Bekanntes Mitglied
Hmmm... also ich mache das so:

[Java]

final JFrame jFrame = new JFrame();



Color color = new Color(0,0,0);

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setTitle(title);

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
jFrame.setLocation(0,0);
jFrame.setResizable(false);
jFrame.setSize(800, 600);
jFrame.setUndecorated(true);
jFrame.setLayout(null);
jFrame.setBackground(color);
jFrame.setVisible(true);
jFrame.setFocusable(true);
jFrame.setResizable(false);

GraphicsDevice graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

if(graphicsDevice.isFullScreenSupported()) graphicsDevice.setFullScreenWindow(jFrame);

try {

DisplayMode dm = new DisplayMode(800, 600, 16, 60);
graphicsDevice.setDisplayMode(dm);
}
catch(Exception e) { System.exit(0); }
}


[/Java]
 
Habs jetzt hinbekommen. Lag an den Parametern für bitDepth und RefreshRate. Allerdings funktionierts immer noch nicht so 100%ig. Also wenn ich mir die BreitexHöhe ausgeben lasse, dann hat mein Frame die eingegebenen 800x600 (auch wenn ich diese zuvor nicht mit setSize gesetzt habe. Ist das Standard oder wirkt sich da setDisplayMode irgendwie drauf aus?). Das Canvas hat allerdings 1440x900 (ist meine aktuell eingestellte Bildschirmauflösung des Desktop). Die Grösse des Canvas lässt sich nur ändern wenn ich mit setSize() die Auflösung umstelle, allerdings funktioniert das nur nach der Zeile "setFullscreenWindow(Frame)". Wenn ich das vorher mache, dann habe ich wieder die 1440x900.
Habe jetzt also die Auflösung des Canvas danach geändert, habe jetzt aber links und rechts am Bildschirm einen Rand. Also Frame und Canvas haben jetzt 800x600, der ganze Bildschirm ist auch schwarz, aber die Zeichenfläche wird eben durch diese Ränder begrenzt. Würde eigntlich gar nicht auffallen, habe aber ein kleines 2d Spiel gemacht und merke das, wenn ich mit der Spielfigur nicht ganz bis zum Bildschirmrand gehen kann.
 

Friedhelm

Bekanntes Mitglied
Das man die Canvasgröße erst nach setFullscreen ändert ist richtig.

Der Rand ist auch in Ordnung, weil wenn man einen 16:9 LCD hat, dann ist halt bei 800x600 (4:3) Platz der nicht genutzt werden kann. Lösung => eine 16:9/16:10 Auflösung benutzen :)

Ansonsten kein Fullscreen einschalten, dann hat man 800x600 nativ :D
 
Vielen Dank für deine Hilfe. Funktioniert jetzt wirklich alles super (mit der passenden Auflösung hab ich dann auch richtig Vollbild :)

Jetzt hätt ich trotzdem noch ein paar Fragen:

Also: Hab jetzt schon einiges in Richtung 2D Spiele programmierung gemacht und wollt mal fragen welche Technik man so prinzipiell anwendet. Ich will vorallem auf Performance-Verbesserungen hinaus.

-Aktiviert man einfach per "System.setProperty("sun.java2d.opengl", "true");" die OpenGL Pipeline und
zeichnet dann mit Graphics2D. Ich habe das jetzt mit einem Canvas benutzt, hätte man mit Swing
Komponenten eig. noch einen grösseren Vorteil?
-Oder bringt JOGL sogar noch mehr Performance(Kenn mich mit JOGL allerdings noch gar nicht aus)?
Macht es überhaupt viel Sinn für 2D Spiele JOGL zu benutzen?
 

Friedhelm

Bekanntes Mitglied
-Aktiviert man einfach per "System.setProperty("sun.java2d.opengl", "true");" die OpenGL Pipeline und
zeichnet dann mit Graphics2D. Ich habe das jetzt mit einem Canvas benutzt, hätte man mit Swing
Komponenten eig. noch einen grösseren Vorteil?
-Oder bringt JOGL sogar noch mehr Performance(Kenn mich mit JOGL allerdings noch gar nicht aus)?
Macht es überhaupt viel Sinn für 2D Spiele JOGL zu benutzen?


Also ich habe schon viel mit 2D und Java probiert... und alles was ich bisher getestet habe war "rukelig". Es hat keinen Spass gemacht. Man kommt zwar nah an ruckelfrei ran, aber das wars auch schon. Auch wenn man System.setProperty("sun.java2d.opengl", "true") aktiviert, hatte ich immer Performanceprobleme. Kann sein das ich keine Ahnung habe und hier ein Java 2D Crack Schreit "Oh mein Gott", aber ich habs nie hinbekommen.

Dann habe ich Jake2 (Quake2 in Java) gesehen das OpenGL für Java benutzt... und da ging mir ein Licht auf. Seit dem arbeite ich mit LWJGL 2.5 oder JOGL2 (eigentlich gleichzeitig... ich schalte ab und zu mal um).

Und da ist es, zumindest wenn man Fullscreen aktiviert wirklich flüssig. Im Windows-Modus ruckelt es je nachdem was sich auf dem übrigend Bildschirm so tut. Aber das reicht mir.

Der große Vorteil bei JOGL/LWJGL... ich kann jetzt ca. 2000 bewegte und rotierende 2D Flächen gleichzeitig auf den Screen flitzen lassen, ohne das es ruckelt und das war mein Ziel. Ausserdem kann man jetzt, wenn man sich in JOGL/LWJGL eingearbeitet hat auch leichter auf Android umsteigen, oder für beide Plattformen entwickeln. Das ist schon nett :D

Ich kann ganz klar eine Empfehlung JOGL/LWJGL zu benutzen geben.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Fullscreen langsamer als Window Mode Spiele- und Multimedia-Programmierung 15
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
T FullScreen Spiele- und Multimedia-Programmierung 4
G Fullscreen + zusätzliche Frames Spiele- und Multimedia-Programmierung 3
S FullScreen Modus - Spielschleife überzeichnet zweite JFrame Spiele- und Multimedia-Programmierung 5
I Java Andere Fenster in Borderless-Mode setzen Spiele- und Multimedia-Programmierung 16
Ernesto95 Full Screen Exlusive Mode (FSEM) unter Ubuntu Spiele- und Multimedia-Programmierung 2
B Scrollen im Full-Screen Exclusive Mode Spiele- und Multimedia-Programmierung 3
T onDrawFrame(GL10 glUnused) und onDraw(Canvas canvas) parallel ? Spiele- und Multimedia-Programmierung 1
R Canvas Circle bewegen? Spiele- und Multimedia-Programmierung 14
T MouseControl : JME Canvas in Swing Gui Spiele- und Multimedia-Programmierung 7
M JOGL - Mehr als nur ein Canvas - Texturpool Spiele- und Multimedia-Programmierung 7
F schöne Animationen auf 2D Canvas Spiele- und Multimedia-Programmierung 4
O Facebook-Spiel mit GWT Canvas Spiele- und Multimedia-Programmierung 1
Developer_X Java3D Canvas post Renderer und? Spiele- und Multimedia-Programmierung 5
F Von Canvas (mit BufferStrategy) zu Applet Spiele- und Multimedia-Programmierung 8
DamienX Canvas vs JPanel Spiele- und Multimedia-Programmierung 15
R Canvas Spiele- und Multimedia-Programmierung 6
U Canvas Ursprung ändern Spiele- und Multimedia-Programmierung 11
K mit Canvas übereinander zeichnen Spiele- und Multimedia-Programmierung 4
S Probleme mit Canvas! Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen


Oben