2010-08-26 12 views
0

Я хочу добиться эффекта java в кисти, мышь вернулась к точке, быстрее двигаем мышью, тоньше линии.эффект кисти в java

+1

ли вы имеете в виду, что вы хотите достичь эффекта кисти в волочильном инструменте свободной руки, написанном в Java, так что толщина линии зависит от скорости мыши двигается? (Кстати, это не так, как ведут себя настоящие кисти). –

+0

Спасибо, потому что я пишу процедуру java, надеюсь передать перемещение мыши, чтобы выразить этот эффект. Я действительно не понимаю, как ведут себя настоящие кисти. Возможно, , вы можете сказать мне. Спасибо снова! –

ответ

2

Вот программа, которая демонстрирует то, чего вы пытаетесь достичь.

Эта программа не идеальна, но должна помочь вам начать с того, что вы пытаетесь построить.

import java.awt.Canvas; 
import java.awt.Graphics; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseMotionListener; 

import javax.swing.JFrame; 

public class PaintBrush { 

    JFrame f; 
    Canvas c; 
    int x=-1, y=-1; 

    public PaintBrush() { 
     f = new JFrame(); 
     f.setSize(600, 400); 
     c = new Canvas() { 
      public void paint(Graphics g) { 
       // super.paint(g); 
      } 
     }; 
     f.getContentPane().add(c); 
     c.addMouseMotionListener(new MouseMotionListener() { 

      @Override 
      public void mouseMoved(MouseEvent e) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void mouseDragged(MouseEvent e) { 
       if(x==-1){ 
        x = e.getX(); 
        y = e.getY(); 
       } 
       int diffx = Math.abs(x - e.getX()); 
       int diffy = Math.abs(y - e.getY()); 
       System.out.println("diffx:"+diffx+"\t"+"diffy:"+diffy); 
       int speed = (int) Math.sqrt((diffx + diffy)); 
       if(speed>1){ 
        c.getGraphics().fillOval(x, y, 20-speed*2, 20-speed*2); 
       }else { 
        c.getGraphics().fillOval(x, y, 20, 20); 
       } 
       System.out.print("Speed:"+speed + "\t"); 
       System.out.println("x:"+e.getX()); 
       x = e.getX(); 
       y = e.getY(); 
      } 
     }); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setVisible(true); 
    } 

    public static void main(String[] args) { 
     new PaintBrush(); 

    } 
Смежные вопросы