我想刷新窗口的背景,因为我的程序的目标是将点连接在一起。但是,每次创建新的最后一个点时,原始(第一个)点将连接到新的最后一个点,同时删除先前的连接。
我能够将原始点连接到最后一点。但是,前一行仍显示在窗口上。
我已经尝试过通过将'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);
}
}
我希望删除上一条最后一条线,并用一条新线连接原始点和新的最后点。
有两种通用方法:
选项1:将所有点存储在数据结构中,例如数组或ArrayList
。在每一帧中,绘制背景,然后重新绘制所有点。此选项是几行代码,但允许您制作更复杂的动画。
选项2:将所有点绘制到PGraphics
实例,然后将该实例绘制到框架。这样可以将背景与前景分开。此选项的代码较少,但是在将点绘制到PGraphics
之后,您无法动态更新它们。
您选择哪种选择取决于您,什么才是最适合您的目标的选择。您可以在reference中找到有关这两种方法的更多信息。您也可以尝试使用诸如“ Processing PGraphics”之类的工具搜索大量结果。祝你好运!