mardi 28 avril 2015
window-Klasse, main-loop und unausschaltbares anti-aliasing
Posted on 10:04 by verona
Hallo,
ich versuche seit 2 Tagen ein Fenster im Vollbildmodus zu erstellen, worauf ich das zeichnen kann, was ich will und auch volle Kontrolle darüber habe.
Hier meine window-Klasse (Kommentare nur für den post erstellt):
Wenn ich in meiner main-Klasse darüber loope, also zuerst die Methode "render()" und dann "paint()" im loop aufrufe, funktioniert das auch ganz gut. Da ich mich nicht damit auskenne, ob das wirklich effizient ist, oder wie ich da genau drüber-loopen soll, wollte ich hier einfach mal fragen, was ihr davon haltet.
Außerdem habe ich das Problem, dass egal was ich den graphics mitteile, das Quadrat immer anti-aliased dargestellt wird...
Also bei beiden Methoden
hilft nicht.
Ich brauche also Hilfe dabei, wie die window-Klasse aufgebaut sein soll, wie der main-Loop sein soll(Effizienz...) und wie ich das anti-aliasing ausschalten kann.
Ich hoffe ihr könnt mir helfen, danke
ich versuche seit 2 Tagen ein Fenster im Vollbildmodus zu erstellen, worauf ich das zeichnen kann, was ich will und auch volle Kontrolle darüber habe.
Hier meine window-Klasse (Kommentare nur für den post erstellt):
Java Code:
-
package window;
-
-
import java.awt.Color;
-
import java.awt.DisplayMode;
-
import java.awt.Graphics;
-
import java.awt.GraphicsDevice;
-
import java.awt.GraphicsEnvironment;
-
import java.awt.Toolkit;
-
import java.awt.image.BufferStrategy;
-
import java.awt.image.BufferedImage;
-
import java.lang.reflect.InvocationTargetException;
-
-
-
import javax.swing.JFrame;
-
import javax.swing.SwingUtilities;
-
-
-
/**
-
*
-
*/
-
private static final long serialVersionUID = -5779675260844878716L;
-
-
-
private BufferStrategy bufferStrategy; /* Benutze ich um zu zeichnen und Probleme wie tearing(?) zu umgehen */
-
private BufferedImage mainImage; /* Das ist das Bild, auf das ich zeichne, dann in der Paint-Methode anzeigen lasse */
-
-
super(title);
-
-
setUndecorated(true);
-
setResizable(false);
-
-
GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment(); /* Verantwortlich für das Vollbild */
-
DisplayMode displayMode = new DisplayMode(device.getDisplayMode().getWidth(),
-
device.getDisplayMode().getHeight(),
-
device.getDisplayMode().getBitDepth(),
-
device.getDisplayMode().getRefreshRate());
-
device.setFullScreenWindow(this);
-
device.setDisplayMode(displayMode);
-
-
try {
-
SwingUtilities.invokeAndWait(new Runnable() { /* Sollte darauf warten, dass das Fenster komplett aufgebaut und bereit zum Zeichnen ist */
-
-
-
@Override
-
public void run() {
-
createBufferStrategy(1); /* Nur einen buffer(?) erstellen, da ich ein eigenes Bild zum Zeichnen benutze */
-
bufferStrategy = getBufferStrategy();
-
mainImage = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_4BYTE_ABGR); /* Das Bild erstellen */
-
-
setFocusable(true); /* Damit das Fenster fokusiert wird */
-
requestFocus();
-
}
-
-
});
-
}
-
-
public void render() {
-
g.fillRect(100, 100, 100, 100); /* Ein blaues Quadrat zeichnen */
-
g.dispose();
-
}
-
-
-
public void paint() {
-
if(bufferStrategy != null) {
-
Graphics g = bufferStrategy.getDrawGraphics(); /* Graphics der buffer strategy, also zum Anzeigen des Bildes */
-
g.drawImage(mainImage, 0, 0, getWidth(), getHeight(), null); /* Zeichnen des Bildes */
-
g.dispose();
-
bufferStrategy.show(); /* Das Ganze anzeigen lassen */
-
}
-
}
-
}
Wenn ich in meiner main-Klasse darüber loope, also zuerst die Methode "render()" und dann "paint()" im loop aufrufe, funktioniert das auch ganz gut. Da ich mich nicht damit auskenne, ob das wirklich effizient ist, oder wie ich da genau drüber-loopen soll, wollte ich hier einfach mal fragen, was ihr davon haltet.
Außerdem habe ich das Problem, dass egal was ich den graphics mitteile, das Quadrat immer anti-aliased dargestellt wird...
Also bei beiden Methoden
Java Code:
Ich brauche also Hilfe dabei, wie die window-Klasse aufgebaut sein soll, wie der main-Loop sein soll(Effizienz...) und wie ich das anti-aliasing ausschalten kann.
Ich hoffe ihr könnt mir helfen, danke
window-Klasse, main-loop und unausschaltbares anti-aliasing
Inscription à :
Publier les commentaires (Atom)
0 commentaires:
Enregistrer un commentaire