我喜欢使用Processing数组函数,但是当我使用此函数进行绘制时,我意识到它会将每个绘制的形状存储在内存中,这会导致CPU峰值。 (特别是到几千时)
如何烘烤图形,然后在释放鼠标时删除数组对象?我的意思是,Processing是否可以在每个笔触之后将这些对象表现为单个图像,然后使用.remove(0)
函数清除数组?
这是我的代码:
ArrayList <Drawing> drawings = new ArrayList <Drawing>();
void setup() {
size(400, 400);
background(255);
colorMode(HSB);
}
void draw() {
background(255);
for (int i=0;i<drawings.size();i++) {
drawings.get(i).display();
}
println(drawings.size());
}
void mouseDragged() {
drawings.add(new Drawing(mouseX, mouseY));
}
class Drawing {
float x, y, r;
color c;
Drawing(float ax, float ay) {
x=ax;
y=ay;
r=random(2, 20);
c=color(random(100, 200), 255, 255, 88);
}
void display() {
noStroke();
fill(c, 100);
ellipse(x,y, r, r);
}
}
是否有特殊原因每次都要重绘白色背景?如果没有,我想你可以做这样的事情:
ArrayList<Drawing> drawings = new ArrayList();
void setup()
{
size(400, 400);
background(255);
colorMode(HSB);
}
void draw()
{
println(drawings.size());
}
void mouseDragged()
{
Drawing drawing = new Drawing(mouseX, mouseY);
drawing.display();
drawings.add(drawing);
}
class Drawing
{
float x, y, r;
color c;
Drawing(float ax, float ay)
{
x=ax;
y=ay;
r=random(2, 20);
c=color(random(100, 200), 255, 255, 88);
}
public void display()
{
noStroke();
fill(c, 100);
ellipse(x,y, r, r);
}
}