我正在尝试在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;
}
}
}
}
答案 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();
}
}