2017-03-29 95 views
0

我在這裏與球動畫的問題是,球正在直線移動留下的蹤跡。我預期的結果是,不應該有球的蹤跡。Java多線程球動畫

該代碼確定球沿着X軸的一個方向上的運動。

public class App extends JFrame implements Runnable{ 

    int x=0,y=250; 

    public void run() { 
     for(;;) { 
     try { 
      repaint(); 
      x++; 
      Thread.sleep(10); 
     } catch(Exception e){} 
     } 
    } 

    public void paint(Graphics g) { 
     g.drawOval(x,y,30,30); 
    } 

    public static void main(String[] args) { 
     App frame= new App(); 
     frame.setTitle("Bounce"); 
     frame.setSize(400, 450); 
     frame.setVisible(true); 
     Thread t1 = new Thread(frame); 
     t1.start(); 
    } 
} 
+0

[繪製一個矩形,不會在下一個繪畫中消失](http://stackoverflow.com/questions/12683533/drawing-a-rectangle-that-wont-disappear-in-next-paint)應該結束你的問題是什麼以及如何解決它。你需要使用'paintComponent(Graphics g)'並且調用'super.paintComponent(g)'來擺脫那個「蹤跡」。 – Obicere

+0

哎。一般而言,這是非常糟糕的做法。整個GUI在EDT之外運行。 –

回答

0

你錯過來電super.paintpaint方法:

public void paint(Graphics g) { 
    super.paint(g); 
    g.drawOval(x,y,30,30); 
} 
+0

完美!它與那些神奇的線... – Prinze

0

這不是一個多線程的問題,你只是不「抹去」你畫上一個X上的橢圓形。您的paint方法需要調用super.paint()以清除以前的橢圓。這是解釋here與你幾乎相同的代碼,但沒有你的問題!

+0

感謝隊友它真的幫助! – Prinze