Hi,
---(genaues Problem unten, hier nur Einleitung)---
ich wollte mal ein einfaches Spiel in Java machen. Und wollt euch fragen, ob ich da grundlegend was falsch mache oder ob das nicht geht.
Und zwar wollte ich das erst in einem Frame (extends Frame) machen. Da trat aber ein Problem auf (gleiche wie unten), also suchte ich mal nach nem Tut und bin in dem Forum hier auf Quaxli's ausführliches 2D-Spieleprogrammierung-Tut gestoßen hier. Habe also JPannel und JFrame statt Frame genommen und die Bewegung anhand der vergangenen Zeit statt mit Einheiten je Zeit gemacht. Habe nicht das ganze Tut-Programm gemacht sondern nur in etwa die beschriebene Bewegung. Hatte da gleich die Dateien von meinem Frame-Spiel-Versuch genommen und abgeändert.
Problem: Bewegungen von Bild nicht flüssig.
Obwohl ich paintComponent vom JPanel aller 10ms (100fps) aufrufe ruckelt das bildvor sich hin. Auch 100ns bringen nix. Das Bild hat eine Geschwindigkeit von ca. 200px/sec.
hier relevanter code: (steuerung mit wasd)
oder ist das bild noch nicht geladen und muss immer wieder neu geladen werden?
Dies ist zwar nicht 100% wie im Tut aber müsste doch auch klappen, oder?
Oder liegts daran, dass erst das alte bild gelöscht wird und dann das neue hinzu kommt und das so lange dauert, dass man denk es ist nich flüssig? Da Lieber noch ein 2. Bild reinmachen, dass dem ersten in der Bewegung folgt?
---(genaues Problem unten, hier nur Einleitung)---
ich wollte mal ein einfaches Spiel in Java machen. Und wollt euch fragen, ob ich da grundlegend was falsch mache oder ob das nicht geht.
Und zwar wollte ich das erst in einem Frame (extends Frame) machen. Da trat aber ein Problem auf (gleiche wie unten), also suchte ich mal nach nem Tut und bin in dem Forum hier auf Quaxli's ausführliches 2D-Spieleprogrammierung-Tut gestoßen hier. Habe also JPannel und JFrame statt Frame genommen und die Bewegung anhand der vergangenen Zeit statt mit Einheiten je Zeit gemacht. Habe nicht das ganze Tut-Programm gemacht sondern nur in etwa die beschriebene Bewegung. Hatte da gleich die Dateien von meinem Frame-Spiel-Versuch genommen und abgeändert.
Problem: Bewegungen von Bild nicht flüssig.
Obwohl ich paintComponent vom JPanel aller 10ms (100fps) aufrufe ruckelt das bildvor sich hin. Auch 100ns bringen nix. Das Bild hat eine Geschwindigkeit von ca. 200px/sec.
hier relevanter code: (steuerung mit wasd)
Java:
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
setMovement();
time = System.nanoTime();
g.drawImage(thePlayer, (int) player.x_pos, (int) player.y_pos, this);
}
public void run() {
while (running) {
paintComponent(data.getGraphics());
try {
Thread.sleep(10);
} catch (InterruptedException ex) {
}
}
}
//------------------
public void setMovement() {
if (data.getKeyboard().d_isD) {
player.x_pos += 400*((double) (System.nanoTime() - time)) / div;
}
if (data.getKeyboard().a_isD) {
player.x_pos -= 400*((double) (System.nanoTime() - time)) / div;
}
if (data.getKeyboard().s_isD) {
player.y_pos += 400*((double) (System.nanoTime() - time)) / div;
}
if (data.getKeyboard().w_isD) {
player.y_pos -= 400*((double) (System.nanoTime() - time)) / div;
}
}
oder ist das bild noch nicht geladen und muss immer wieder neu geladen werden?
Java:
Image thePlayer = Toolkit.getDefaultToolkit().getImage("data\\player.jpg");
Dies ist zwar nicht 100% wie im Tut aber müsste doch auch klappen, oder?
Oder liegts daran, dass erst das alte bild gelöscht wird und dann das neue hinzu kommt und das so lange dauert, dass man denk es ist nich flüssig? Da Lieber noch ein 2. Bild reinmachen, dass dem ersten in der Bewegung folgt?