2012-04-16 56 views
1

我的目標是在拖動鼠標時繪製點。 問題是,當鼠標移動得非常快時,點之間的距離變得很大,而不是小的期望距離,這將不被識別。Java Applet:快速拖動的鼠標在點之間產生巨大的差距

縮短的代碼是:

public void update(Graphics g){ 
    paint(g); 
} 

public void paint(Graphics g){ 
     for(i = 0; i <= height; i++){ 
      for(j = 0; j <= width; j++){ 
       if(virWorld[i][j] == 1) bufferGraphics.fillRect(i,j,1,1); 
      } 
     } 
     g.drawImage(offscreen,0,0,this); 
} 

public void mouseDragged(MouseEvent evt){ 
    curX = evt.getX(); 
    curY = evt.getY(); 
    virWorld[curX][curY] = 1; 
} 


public void run(){ 
    while(true){ 
     repaint(); 
     try{ 
      Thread.wait(10);  
     } 
     catch(Exception exception){ 
      System.out.println(exception); 
     } 
    } 
} 

感謝您的幫助, 羅賓

+1

你可能想問一個問題並指出你想達到的目標。 – 2012-04-16 19:11:36

+0

run()方法是不必要的,因爲repaint()將在需要時從Event Dispatch Thread調用。 – Adamski 2012-04-16 19:15:30

+0

不要忘記跟進,如接受答案或指出爲什麼答案不適合您的需求! – 2012-05-07 21:33:45

回答

2

所以它。你需要在前一點和當前點之間進行插值,即在兩點之間畫一條線。另外,當你這樣做時,你可能想設置一個較粗的筆劃。

+0

非常感謝,這已經在我心中,但我認爲可能會有一個基本的問題,爲什麼實際發生。 – user1305241 2012-04-16 19:17:43

1

在遠點之間繪製一條線,或者如果您冒險嘗試一條曲線。

+0

如果你至少有點冒險,我懷疑你會適合編程。 ;) – 2012-04-16 19:45:36

+0

只是好奇:你會如何繪製曲線?平滑3點以上? – ControlAltDel 2012-04-16 20:10:47

+0

請參見類似['Ellipse2D'](http://docs.oracle.com/javase/7/docs/api/java/awt/geom/Ellipse2D.html),['CubicCurve2D'](http:// docs .oracle.com/javase/7/docs/api/java/awt/geom/CubicCurve2D.html)&['QuadCurve2D'](http://docs.oracle.com/javase/7/docs/api/java/ awt/geom/QuadCurve2D.html),它們基於幾個控制點呈現平滑的曲線。 – 2012-04-16 20:49:23