#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);
}
}
}