Thread.sleep () stoppt meine Farbe?

Ich mache ein Programm, das versucht, eine Karte zu animieren, die sich über den Bildschirm bewegt, als ob Sie sie tatsächlich von einem Schreibtisch gezogen hätten. Hier ist der Code für die Animation:

public void move(int x, int y) {
    int curX = this.x; //the entire class extends rectangle
    int curY = this.y;

    // animate the movement to place
    for (int i = curX; i > x; i--) {
        this.x = i;
    }

    this.x = x;
    this.y = y;
}

Dieses rechteckige Objekt befindet sich innerhalb eines Bedienfelds in einem Jframe. Zum Neulackieren des Panels habe ich folgendes:

public void run() {
    while (Core.isRunning()) {
        gamePanel.repaint(); //panel in which my rectangle object is in

        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Dies ist ein Thread, der das GamePanel alle 50 Millisekunden aktualisiert.

Jetzt ist mir klar, dass dies möglicherweise nicht der beste Weg ist, so etwas zu tun. Wenn es einen besseren Weg gibt, diese ganze Sache zu übermalen, informieren Sie mich bitte!

Aber das Problem, das ich habe, ist, wenn ich das anrufemove() Befehl für mein Rechteck, geht es durch den Thread, aber das Bild wird nicht bis zum Ende aktualisiert, so ist es nur ein Sprung von Punkt a zur endgültigen Position.

Warum passiert dies? Kann jemand meinen Code kritisieren / verbessern? Vielen Dank!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage