2012-04-16 63 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