Как провести границу между предыдущим щелчком и самым последним щелчком?

#java #processing

Вопрос:

 int previousX;
int previousY;
void  setup() {
   size(400, 400);
   stroke(255);
} 
void mousePressed(){
  previousX = mouseX;
  previousY = mouseY;
}
void  draw() {
   background(75, 55, 43);
   line(previousX,previousY,mouseX, mouseY);   
}
 

Предполагается, что конечным результатом будет, когда пользователь щелкает мышью, линия будет отображаться от 0,0 до того места, где пользователь щелкает мышью, затем, когда пользователь снова щелкает мышью, от предыдущего щелчка мыши до нового щелчка мыши рисуется другая линия. Пример: строка(0,0,50,43) строка(50,43,25,67) строка(25,67,99,77). В коде, который я в настоящее время не показываю никаких постоянных строк, но в нем есть предыдущий щелчок мыши.

Ответ №1:

Самым простым решением было бы не рисовать поверх предыдущих строк background(...) . Это выглядело бы так:

 int previousX;
int previousY;
void  setup() {
   size(400, 400);
   stroke(255);
} 
void mousePressed(){
  line(previousX,previousY,mouseX, mouseY);   
  previousX = mouseX;
  previousY = mouseY;
}
void  draw() {
}
 

Обратите внимание, что это будет работать только в том случае, если вам не нужно очищать холст с background(...) помощью .

Ответ №2:

Для того чтобы нарисовать предыдущие постоянные линии, вам нужно сохранить все предыдущие точки. Этого можно достичь с помощью an ArrayList . Точки были сохранены с использованием PVector для группировки компонентов x и. y

 ArrayList<PVector> points = new ArrayList<PVector>(); 

void  setup() {
   size(400, 400);
   stroke(255);
   
   // The first point is (0, 0)
   points.add(new PVector(0, 0));
} 
void mousePressed(){
  // Each time the mouse is pressed add a new point
  points.add(new PVector(mouseX, mouseY));
}
void  draw() {
   background(75, 55, 43);
   
   // Loop through the array list
   for(int i = 0; i < points.size(); i  ){
     if(i == points.size()-1){
       // For the last point draw a line to the mouse
       line(points.get(i).x, points.get(i).y, mouseX, mouseY);
     }else{
       // Draw a line between each of the points
       line(points.get(i).x, points.get(i).y, points.get(i 1).x, points.get(i 1).y);
     }
   }
}