Moin!
Ich möchte anfangen, 2D-Spiele zu programmieren. Dafür habe ich mich ein bisschen mit dem Tutorial von Quaxli beschäftigt. Das Tutorial gefällt mir sehr gut, die Gedankengänge sind sehr gut nachvollziehbar. Was mich allerdings stört, ist das Ergebnis: Die Sprites ruckeln (ein bisschen).
Ich habe daraufhin die Klasse GamePanel mit Minimalfunktionen nachprogrammiert und wollte ein Rechteck über den Bildschirm gleiten lassen, bei jedem repaint einen Pixel weiter. Aber es ruckelt, egal ob 10 FPS oder 140 oder irgendwas dazwischen. Ich frage mich jetzt, ob das Ruckeln nur auf meine Rechnerleistung zurückzuführen ist, oder ob sich bewegende Objekte auf einem JPanel der Grund sind. Bei ApoMario habe ich z.B. 140 FPS und so gut wie kein Ruckeln.
Meine Vermutung ist daher, dass ein JPanel gar nicht so gut geeignet ist, um Spiele mit Sprites zu programmieren. Was kann man stattdessen benutzen? Ich möchte auch keine fertige Engine nutzen, denn es geht mir ja gerade darum zu lernen und mir selbst die Klassen zu schreiben, die ich für ein 2D-Spiel brauche.
Hier noch die relevanten Methoden meines Programms, vielleicht mache ich ja irgendwas furchtbar falsch:
Ich möchte anfangen, 2D-Spiele zu programmieren. Dafür habe ich mich ein bisschen mit dem Tutorial von Quaxli beschäftigt. Das Tutorial gefällt mir sehr gut, die Gedankengänge sind sehr gut nachvollziehbar. Was mich allerdings stört, ist das Ergebnis: Die Sprites ruckeln (ein bisschen).
Ich habe daraufhin die Klasse GamePanel mit Minimalfunktionen nachprogrammiert und wollte ein Rechteck über den Bildschirm gleiten lassen, bei jedem repaint einen Pixel weiter. Aber es ruckelt, egal ob 10 FPS oder 140 oder irgendwas dazwischen. Ich frage mich jetzt, ob das Ruckeln nur auf meine Rechnerleistung zurückzuführen ist, oder ob sich bewegende Objekte auf einem JPanel der Grund sind. Bei ApoMario habe ich z.B. 140 FPS und so gut wie kein Ruckeln.
Meine Vermutung ist daher, dass ein JPanel gar nicht so gut geeignet ist, um Spiele mit Sprites zu programmieren. Was kann man stattdessen benutzen? Ich möchte auch keine fertige Engine nutzen, denn es geht mir ja gerade darum zu lernen und mir selbst die Klassen zu schreiben, die ich für ein 2D-Spiel brauche.
Hier noch die relevanten Methoden meines Programms, vielleicht mache ich ja irgendwas furchtbar falsch:
Java:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(x, x, 120, 40);
if (showFps) {
g.setColor(Color.GREEN);
g.fillRect(5, 5, 120, 40);
g.setColor(Color.RED);
g.drawString("FPS: " + df.format(fps), 10, 20);
g.drawString("DELTA: " + df.format((double) delta / 1000000) + " ms", 10, 35);
}
}
private void computeDelta() {
delta = System.nanoTime() - last;
last = System.nanoTime();
fps = (1000000000.0) / delta;
}
@Override
public void run() {
while (running) {
computeDelta();
x++;
repaint();
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}