在显示动画时按按钮更改对象

时间:2014-05-09 16:01:04

标签: processing

我正在尝试在我的代码中添加动画。到目前为止我所拥有的是一个可以通过按下按钮来改变的对象。所以每次按下按钮,对象都会改变(它是一棵树,我正在改变它的分支)。有可能像雪一样添加某种动画吗?问题是我必须把它放在draw方法中,所以它会被自动调用,让我们认为它是动画。因此,我还必须一直添加背景/按钮和所有内容。但我不能用我的主要对象(树)做到这一点,因为我只想在你按下按钮时改变它。

有没有解决方案呢?

提前致谢

1 个答案:

答案 0 :(得分:1)

要在刷新其他对象时保留某些对象,您可以:

  1. 仅刷新部分屏幕。比如,绘制一个形状(矩形或其他),背景颜色只消除屏幕的一部分

  2. 有条件地绘制选定的对象。使用标记选择性地绘制您需要的内容,每次绘制,并使用background()在每个绘制周期中清除整个屏幕。

  3. 使用图层。根据需要删除一个图层而不是其他图层,在绘图中显示所有图层。这通常使用PGraphics个对象完成。搜索处理+图层以查看样本。在这里和/或processing forum

  4. 修改 这里有一些简单的例子:

    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();
    }