Как обновить окно, но сохранить ранее нарисованные объекты - PullRequest
0 голосов
/ 31 октября 2019

Я хотел бы обновить фон окна, так как цель моей программы - соединить точки вместе. Однако каждый раз, когда создается новая последняя точка, исходная (первая) точка будет соединяться с новой последней точкой при удалении предыдущего соединения.

Я могу подключить исходную точку к последней точке. Однако предыдущая строка по-прежнему отображается в окне.

Я попытался обновить фон, вставив 'background (255)' в раздел 'void draw ()', чтобы он постоянно обновлялся после ', если(mousePressed == true) '

Однако он полностью сотрет ранее нарисованные объекты.

//set global variables
final int N_PARTITIONS = 10;
        int PrevX = -1;
            int PrevY = -1;
        int count = 0;
     int gridx = 0;
  int gridy = 0;
int OriginalX;
int OriginalY;
PVector[] Vector = new PVector[1]; {
Vector[0] = new PVector();

}
//CREATING WINDOW SIZE
void setup() {
  size(600, 360);
    surface.setResizable(true); 
    background(255);
}



void mouseClicked() {

   if(count == 0) {
        Vector[0].x = mouseX;
        Vector[0].y = mouseY;
     }
      count++;

              CallEllipse();
             if (PrevX != -1) {
                 line(PrevX, PrevY, mouseX, mouseY);
             }
             if (count >= 3) {
               DrawLine();
             }



      PrevX = mouseX;
      PrevY = mouseY;

    PVector[] PrevLine = new PVector[1];
   PrevLine[0] = new PVector();
     PrevLine[0].x = PrevX;
     PrevLine[0].y = PrevY;


}


void CallEllipse() {
  ellipse(mouseX, mouseY, N_PARTITIONS, N_PARTITIONS);
}

void DrawLine() {
  line(Vector[0].x, Vector[0].y, mouseX, mouseY);
}

void grid() {
while(gridx >= 0 & gridy >= 0) {
   stroke(195);
    line(gridx, 0, gridx, height);
      line(0, gridy, width, gridy);
gridx += width/N_PARTITIONS;
gridy += height/N_PARTITIONS;
    }
}

void draw() {
  if (mousePressed == true) {
    mouseClicked();
    background(255);
}
}

Я хочу удалить предыдущую последнюю строку и новую линию для соединения с оригиналомточка и новая последняя точка.

1 Ответ

0 голосов
/ 31 октября 2019

Существует два основных подхода:

Вариант 1: Сохранение всех ваших точек в структуре данных, например в массиве или ArrayList. В каждом кадре нарисуйте фон, а затем перерисуйте все свои точки. Эта опция представляет собой еще несколько строк кода, но она позволяет создавать более сложные анимации.

Опция 2: Нарисуйте все свои точки в экземпляре PGraphics, а затем нарисуйтеэтот экземпляр в кадр. Это позволит вам отделить фон от переднего плана. Эта опция меньше кода, но вы не можете динамически обновлять точки после того, как они нарисованы на PGraphics.

Какой вариант вы выберете, зависит от вас и от того, что лучше всего подходит для ваших целей. Вы можете найти больше информации об обоих подходах в справке . Вы также можете попробовать поискать что-то вроде «Обработка PGraphics», чтобы получить массу результатов. Удачи!

...