Processing 如何刷新窗口但仍保留以前绘制的对象
我想刷新窗口的背景,因为我的程序的目标是将点连接在一起。但是,每次创建新的最后一个点时,原始(第一个)点将连接到新的最后一个点,同时删除以前的连接 我能够将原始点连接到最后一点。但是,上一行仍然显示在窗口上 我尝试通过将“background(255)”插入“void draw()”部分来刷新背景,以便在“if(mousePressed==true)”之后不断刷新 但是,它将完全擦除以前绘制的对象Processing 如何刷新窗口但仍保留以前绘制的对象,processing,Processing,我想刷新窗口的背景,因为我的程序的目标是将点连接在一起。但是,每次创建新的最后一个点时,原始(第一个)点将连接到新的最后一个点,同时删除以前的连接 我能够将原始点连接到最后一点。但是,上一行仍然显示在窗口上 我尝试通过将“background(255)”插入“void draw()”部分来刷新背景,以便在“if(mousePressed==true)”之后不断刷新 但是,它将完全擦除以前绘制的对象 //set global variables final int N_PARTITIONS = 1
//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:将所有点存储在数据结构中,如数组或
ArrayList
。每帧,绘制背景,然后重新绘制所有点。此选项只需再编写几行代码,但它允许您制作更复杂的动画
选项2:将所有点绘制到PGraphics
实例,然后将该实例绘制到帧。这将允许您将背景与前景分开。此选项代码较少,但在将点绘制到PGraphics
后,无法动态更新点
你选择哪个选项取决于你自己,什么对你的目标最有意义。您可以在中找到有关这两种方法的更多信息。你也可以在谷歌上搜索“处理图形”之类的东西,以获得大量的结果。祝你好运 感谢您的反馈!我将尝试选项1,因为我主要关注使用数组:D