如何刷新窗口,但仍保留先前绘制的对象

问题描述 投票:0回答:1

我想刷新窗口的背景,因为我的程序的目标是将点连接在一起。但是,每次创建新的最后一个点时,原始(第一个)点将连接到新的最后一个点,同时删除先前的连接。

我能够将原始点连接到最后一点。但是,前一行仍显示在窗口上。

我已经尝试过通过将'background(255)'插入'void draw()'部分来刷新背景,以使其在'if(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);
}
}

我希望删除上一条最后一条线,并用一条新线连接原始点和新的最后点。

processing
1个回答
0
投票

有两种通用方法:

选项1:将所有点存储在数据结构中,例如数组或ArrayList。在每一帧中,绘制背景,然后重新绘制所有点。此选项是几行代码,但允许您制作更复杂的动画。

选项2:将所有点绘制到PGraphics实例,然后将该实例绘制到框架。这样可以将背景与前景分开。此选项的代码较少,但是在将点绘制到PGraphics之后,您无法动态更新它们。

您选择哪种选择取决于您,什么才是最适合您的目标的选择。您可以在reference中找到有关这两种方法的更多信息。您也可以尝试使用诸如“ Processing PGraphics”之类的工具搜索大量结果。祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.