2011-11-14 79 views
0

我有一個程序,創建一個隨着多線程移動到隨機位置的圓,每個線程將處理每個圓的運動。我知道如何移動圖像而不是形狀對象。java移動一個形狀對象

g2d.draw(s.circle);

這一行只能繪製帶有spawn x y的圓。我想嘗試添加 s.circle.getBounds()。setLocation(s.x,s.y); 之前 g2d.draw(s.circle); 但沒有效果

public void paint(Graphics g) { 
    if (draw == true) { 


     super.paint(g); 
     Graphics2D g2d = (Graphics2D)g; 

      for (Star s : this.items) { 
       //g2d.drawImage(s.starImage, s.x, s.y, this); 

       g2d.draw(s.circle); 

      } 

     Toolkit.getDefaultToolkit().sync(); 
     g.dispose(); 

    } 
} 

public void run() { 

    //if (!items.isEmpty()) { 
     while(true){ 
      try { 
       for (Star s : this.items) { 
        s.move(); 
       } 
       repaint(); 

       Thread.sleep(50); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(Board.class.getName()).log(Level.SEVERE, null, ex); 
      } 
     } 
    //} 
} 
+0

發生了什麼?順便說一句,我不認爲你需要一個線程的單一形狀。 –

+0

單擊一個圈一個動作 – hkguile

+0

我知道它的夥伴,我做了一個像你的應用程序,它運行在一個單一的線程。 –

回答

0

你將不得不

 
1) draw the circle 
2) wait for some short interval (eg, 100ms) 
3) REDRAW the same circle - This time with the background colour, so that it has the effect of erasing the shape. 
4) draw the circle at the new location. 
5) repeat. 

ATLEAST上述工作對我來說,當我做Java/2D - 不張貼實際的代碼很抱歉,因爲它早就是 - 但我相信你會知道它:)

+0

謝謝,完了〜 – hkguile

0

嘗試清除屏幕,然後再次繪畫。使用雙緩衝來防止閃爍。