Ich versuche, ein einfaches 2D-Spiel in Java zu machen.Der beste Weg, um Game-Loop ohne Einfrieren von UI-Thread zu implementieren
Bisher habe ich eine JFrame
, mit einer Menüleiste, und eine Klasse, die JPanel
erweitert und überschreibt es ist paint
Methode. Jetzt muss ich eine Spielschleife machen, wo ich die Position der Bilder aktualisieren werde und so weiter. Ich bin jedoch fest, wie das am besten zu erreichen ist. Soll ich Multithreading verwenden, weil die UI (und damit meine Menüleiste) sicher einfriert, wenn Sie eine Endlosschleife auf den Hauptthread setzen?
Hier ist mein Code so weit:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class GameCanvas extends JPanel {
public void paint(Graphics g) {
while (true) {
g.setColor(Color.DARK_GRAY);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
@SuppressWarnings("serial")
public class Main extends JFrame {
GameCanvas canvas = new GameCanvas();
final int FRAME_HEIGHT = 400;
final int FRAME_WIDTH = 400;
public static void main(String args[]) {
new Main();
}
public Main() {
super("Game");
JMenuBar menuBar = new JMenuBar();
JMenu fileMenu = new JMenu("File");
JMenuItem startMenuItem = new JMenuItem("Pause");
menuBar.add(fileMenu);
fileMenu.add(startMenuItem);
super.add(canvas);
super.setVisible(true);
super.setSize(FRAME_WIDTH, FRAME_WIDTH);
super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
super.setJMenuBar(menuBar);
}
}
Alle Hinweise oder Tipps? Wo sollte ich meine Schleife setzen? In meiner Hauptklasse oder in meiner GameCanvas-Klasse?