2017-03-29 10 views
0

ここで私のボールアニメーションの問題は、ボールがトレイルの後ろをまっすぐに動いていることです。私の予想される結果は、ボールの軌跡がないはずだということです。Java Mutithreading Ball Animation

コードは、X軸に沿ってわずかに一方向にボールの動きを決定します。あなたのpaint方法でsuper.paintを呼び出すために逃した

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)あなたの問題は何か、それをどのように修正するか。その "trail"を取り除くには、 'paintComponent(Graphics g)'と 'super.paintComponent(g)'を呼び出す必要があります。 – Obicere

+0

これは一般的に非常に悪いアプローチです。全GUIはEDTの外で実行されます。 –

答えて

0

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

完璧!それらの魔法のラインで働いた... – Prinze

0

これは、マルチスレッド問題ではありません、あなたはちょうどあなたが前のxについて描く楕円を「消去しない」ん。 paintメソッドは、以前の楕円を消去するためにsuper.paint()を呼び出す必要があります。これはhereとほぼ同じコードで説明されていますが、問題はありません。

+0

それは本当に助けてくれてありがとう! – Prinze