Если линия не закончена, то вы должны нарисовать линию от начальной точки до текущей позиции мыши (mouseX
, mouseY
) в draw()
.
Используйте ArrayList
из PVector
объектов для хранения точек:
ArrayList<PVector> points = new ArrayList<PVector>();
Каждый раз, когда кнопка мыши Нажмите, затем добавьте точку в список:
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
Нарисуйте линии между точками в al oop. Если количество точек в списке нечетное, нарисуйте линию от последней точки до текущей позиции мыши:
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
См. Пример:
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(500 , 500);
}
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
void draw() {
background(0);
stroke(255);
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
}
Если вы хотите начать рисовать линию, когда мышь нажата, и завершить ее sh, когда мышь отпущена, вам нужно добавить 2-ю точку mouseReleased
:
ArrayList<PVector> points = new ArrayList<PVector>();
void setup() {
size(500 , 500);
}
void mousePressed() {
points.add(new PVector(mouseX, mouseY));
}
void mouseReleased() {
points.add(new PVector(mouseX, mouseY));
}
void draw() {
background(0);
stroke(255);
for (int i = 0; i < points.size(); i += 2) {
PVector p1 = points.get(i);
boolean even = i+1 < points.size();
PVector p2 = even ? points.get(i+1) : new PVector(mouseX, mouseY);
line(p1.x, p1.y, p2.x, p2.y);
}
}