简单的线条画

时间:2011-11-17 02:46:40

标签: java graphics line

我正在尝试在java中创建一个简单的线条绘制程序,我将每个像素存储在一个数组中用于绘制。当用户拖动鼠标时,每个像素都设置为1,然后我尝试迭代并在每对点之间画一条线。但是它没有正确绘制,有人可以在这里看到问题吗?

public void mouseDragged(MouseEvent m) {
    screen[m.getX()][m.getY()] = 1;
    drawOffscreen();
}

public void mouseReleased(MouseEvent e) {
    end[e.getX()][e.getY()] = true;     
}


int prex = -1;
int prey = -1;
public void paint(Graphics g) {
    g.drawImage(offscreen, 0, 0, null);     
    for (int x = 0; x < screen.length; x++){
        for (int y = 0; y < screen[0].length; y++){
            if(screen[x][y] == 1){
                if (prex != -1 && prey != -1 && !end[x][y]){
                    g.drawLine(prex, prey, x, y);                                               
                }
                prex = x;
                prey = y;
            }
        }
    }

}

1 个答案:

答案 0 :(得分:2)

(我认为这是作业?如果是,请将其标记为作业)

我敢打赌,没有人会清楚地知道“没有正确画画”是什么意思。无论如何,我能看到的问题之一。

我打赌你只存储1行。但是,存储和绘制的方式存在问题。

您通过在“虚拟屏幕”上标记坐标来存储鼠标“通过”的坐标。但是,当您在屏幕上绘制时,您没有按照鼠标通过的顺序。相反,你是按照从上到下,从左到右的顺序绘制线条,这只是给你一团糟。

您可以考虑存储坐标列表,并在绘制时根据坐标绘制。

的伪代码:

class Coordinate {  // there are some class in Java that already does that, 
                    //leave it to you to find out  :)
  int x;
  int y;
}

List<Coordinate> theOnlyLine=....;
public void mouseDragged(MouseEvent m) {
    theOnlyLine.add(new Coordinate(m.getX(), m.getY());
}

public void mouseReleased(MouseEvent e) {
    theOnlyLine.add(new Coordinate(m.getX(), m.getY());
}

public void paint(Graphics g) {

  int prevX = -1;
  int prevY = -1;
  for (Coordinate coordinate : theOnlyLine) {
    if (prevX > 0 && prevY > 0) {
      g.drawLine(prevX, prevY, coordinate.getX(), coordinate.getY());
    }
    prevX = coordinate.getX();
    prevY = coordinate.getY();
  }
}