我正在尝试在我的代码中添加动画。到目前为止我所拥有的是一个可以通过按下按钮来改变的对象。所以每次按下按钮,对象都会改变(它是一棵树,我正在改变它的分支)。有可能像雪一样添加某种动画吗?问题是我必须把它放在draw方法中,所以它会被自动调用,让我们认为它是动画。因此,我还必须一直添加背景/按钮和所有内容。但我不能用我的主要对象(树)做到这一点,因为我只想在你按下按钮时改变它。
有没有解决方案呢?
提前致谢
答案 0 :(得分:1)
要在刷新其他对象时保留某些对象,您可以:
仅刷新部分屏幕。比如,绘制一个形状(矩形或其他),背景颜色只消除屏幕的一部分
有条件地绘制选定的对象。使用标记选择性地绘制您需要的内容,每次绘制,并使用background()
在每个绘制周期中清除整个屏幕。
使用图层。根据需要删除一个图层而不是其他图层,在绘图中显示所有图层。这通常使用PGraphics个对象完成。搜索处理+图层以查看样本。在这里和/或processing forum。
修改强> 这里有一些简单的例子:
1
/**
* A very simple example of erasing just part of the screen to
* selective persist draws
**/
void setup() {
size(400, 400);
background(0);
noStroke();
}
void draw() {
fill(0);
rect(0, 0, width/2, height);
fill(120);
ellipse(width/4, frameCount%width, 100, 100);
}
void mouseMoved() {
fill(255);
ellipse(mouseX, mouseY, 10, 10);
}
2
/**
* A very simple example of conditionally draw stuf
* to selective persist draws
**/
ArrayList <PVector> points = new ArrayList <PVector>();
boolean showBalls = true; // any key to toogle
void setup() {
size(400, 400);
background(0);
noStroke();
}
void draw() {
background(0);
fill(30);
rect(frameCount%width, 100, 200, 200);
fill(120);
ellipse(width/2, frameCount%width, 150, 150);
fill(255);
if (showBalls) {
for (PVector p : points) {
ellipse(p.x, p.y, 10, 10);
}
}
if (points.size() > 500) {
points.clear();
}
}
void mouseMoved() {
ellipse(mouseX, mouseY, 10, 10);
points.add(new PVector(mouseX, mouseY));
}
void keyPressed() {
showBalls = !showBalls;
}
3
/**
* A very simple example of using PGraphics as layers
* to selective persist draws
**/
PGraphics layer;
void setup() {
size(400, 400);
layer = createGraphics(width, height);
layer.beginDraw();
layer.fill(255);
layer.endDraw();
background(0);
noStroke();
}
void draw() {
background(0);
fill(30);
rect(frameCount%width, 100, 200, 200);
fill(120);
ellipse(width/2, frameCount%width, 150, 150);
image(layer, 0, 0);
}
void mouseMoved() {
layer.beginDraw();
layer.ellipse(mouseX, mouseY, 10, 10);
layer.endDraw();
}