Hallo!
Ich möchte gerne mal ein FullScreen Spiel machen.
Dazu habe ich mir gedacht das man PageFlipping und BufferStrategie einbauen kann.
Hier in diesem Beispiel wird zwar der FullScreen-Mode aufgebaut aber der gameLoop wird nie durchlaufen.
Was ist daran falsch? Warum wird der Loop nie durchlaufen?
PS: Oder hat jemand noch generell irgendwelche Verbesserungsvorschläge zum Source-Code?
Was man vielleicht verbessern kann oder so?
Vielen Dank schonmal im Voraus.
LG
TiGreen
Ich möchte gerne mal ein FullScreen Spiel machen.
Dazu habe ich mir gedacht das man PageFlipping und BufferStrategie einbauen kann.
Hier in diesem Beispiel wird zwar der FullScreen-Mode aufgebaut aber der gameLoop wird nie durchlaufen.
Was ist daran falsch? Warum wird der Loop nie durchlaufen?
PS: Oder hat jemand noch generell irgendwelche Verbesserungsvorschläge zum Source-Code?
Was man vielleicht verbessern kann oder so?
Java:
import java.awt.*;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.image.BufferStrategy;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
public class Window {
public static JFrame fenster;
private GraphicsDevice device;
public static BufferCapabilities.FlipContents flipContents;
public static BufferStrategy strategy;
public static int bildWidth = 0, bildHeight = 0;
private String fensterName = "Puzzle";
public Window() {
device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
BufferCapabilities bufCap = gc.getBufferCapabilities();
boolean page = bufCap.isPageFlipping();
if (!device.isFullScreenSupported()) {
// Spätere Fehlermeldung
}
fenster = new JFrame(device.getDefaultConfiguration());
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setUndecorated(true);
fenster.setResizable(false);
fenster.setTitle(fensterName);
bildWidth = java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
bildHeight = java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
fenster.pack();
fenster.setVisible(true);
device.setFullScreenWindow(fenster);
fenster.createBufferStrategy(2);
strategy = fenster.getBufferStrategy();
flipContents = bufCap.getFlipContents();
if (flipContents.equals(BufferCapabilities.FlipContents.UNDEFINED)) {
} else if (flipContents.equals(BufferCapabilities.FlipContents.BACKGROUND)) {
} else if (flipContents.equals(BufferCapabilities.FlipContents.PRIOR)) {
} else if (flipContents.equals(BufferCapabilities.FlipContents.COPIED)) {
}
if (!page) {
// Spätere Fehlermeldung
}
init();
}
public void init() {
Screen screen = new Screen();
fenster.add(screen);
fenster.setVisible(true);
}
public static void main(String[] args) {
new Window();
}
}
Java:
import java.awt.*;
import javax.swing.*;
public class Screen extends JPanel implements Runnable {
public static boolean gameRunning = true;
private long delta = 0, last = 0, fps = 0;
private Thread gameLoop = new Thread();
public Screen() {
initGame();
}
public void initGame() {
last = System.nanoTime();
gameLoop.start();
}
public void run() {
while (true) {
// Geht hier nicht mal in die Schleife rein :/
System.out.println("test");
Graphics g = Window.strategy.getDrawGraphics();
g.setColor(Color.white);
g.fillRect(0, 0, Window.bildWidth, Window.bildHeight);
handleDelta();
// Draw to graphics
paintMyComponents(g);
Window.strategy.show();
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
}
}
}
public void paintMyComponents(Graphics g) {
// passiert dann natürlich auch nichts
g.setColor(Color.red);
g.fillRect(0, 0, Window.bildWidth, Window.bildHeight);
g.setColor(Color.black);
g.drawString("FPS: " + Long.toString(fps), 200, 100);
}
}
Vielen Dank schonmal im Voraus.
LG
TiGreen