Обработка - Как предотвратить исчезновение фигуры при создании другого - PullRequest
2 голосов
/ 18 апреля 2020

Код, который у меня сейчас есть, позволяет мне создать прямоугольник, используя mousePressed() и mouseDragged(). Однако, когда я начинаю создавать еще один, прямоугольник, который я создал ранее, исчезает.

Я просто хочу, чтобы моя программа создала прямоугольник, а не исчезал при создании другого.

I также хочу, чтобы это работало с background() внутри функции draw(), потому что всякий раз, когда я удаляю background() из программы или помещаю его в setup(), я не могу уменьшить ширину и высоту фигуры при перетаскивании мыши и он создает небольшие следы прямоугольников внутри фигуры, которые возникают при перетаскивании мыши.

Вот мой код

int a, b, c, d = 0;

void setup() {
  size(1000, 800);

}


void draw() {
  background(204);
  stroke(0);
  strokeWeight(2);
  noFill();
  rect(a, b, c, d);
}


void mousePressed() {
  a=mouseX;
  b=mouseY;
}


void mouseDragged() {
  c=mouseX-a;
  d=mouseY-b;
  rect(a, b, c, d);
}

1 Ответ

1 голос
/ 18 апреля 2020

Звучит так, как будто вы можете использовать другой слой для рисования (без очистки). К счастью, это легко сделать, используя PGraphics :

int a, b, c, d = 0;

PGraphics layer;

void setup() {
  size(1000, 800);
  stroke(0);
  strokeWeight(2);
  noFill();
  // make new drawing layer
  layer = createGraphics(width, height);
  // use drawing functions within beginDraw() / endDraw()
  layer.beginDraw();
  layer.stroke(0);
  layer.background(204);
  layer.strokeWeight(2);
  layer.noFill();
  layer.endDraw();
}


void draw() {
  background(204);
  // render background layer
  image(layer,0,0);
  // draw foreground;
  rect(a, b, c, d);
}


void mousePressed() {
  a=mouseX;
  b=mouseY;
}


void mouseDragged() {
  c=mouseX-a;
  d=mouseY-b;
  // draw preview
  rect(a, b, c, d);
}

void mouseReleased(){
  // render final shape into background layer
  layer.beginDraw();
  layer.rect(a, b, c, d);
  layer.endDraw();
}

Если вы решили повеселиться, создавая инструмент для рисования, вы можете увидеть этот ответ .

...