使用多个椭圆的动画并使用keyPressed控制

时间:2016-01-17 15:47:55

标签: processing

我这里的代码是一个动画,它显示了一个按照我喜欢的方式移动的圆圈。我想要有10个圆圈,我假设我使用了一个循环或者可能是一个阵列,但我不太清楚该怎么做。同时,我想做到这一点,首先动画不会移动,但是当我按下特定键时开始移动,当我按下相同的键时停止动画。

color a = color(random(255), random(255), random(255), random(125, 250));
float dia = random(60, 80);
float x;
float y;

float speedX = random(-3, 3);
float speedY = random(-3, 3);

void setup() { 
  background(255);


size(400, 200);
  x = random(dia/2, width-dia/2);
  y = random(dia/2, height-dia/2);

}

void draw() {
  background(255);
  noStroke();
  fill(a);
  ellipse(x, y, dia, dia);
  x = x + speedX;
  y = y + speedY;
  if(speedX > 0 && x >= width - dia/2) {
    speedX = speedX * -1;
  }
  if(speedX < 0 && x <= dia/2) {
    speedX = speedX * -1;
  }
  if(speedY > 0 && y >= height - dia/2) {
    speedY = speedY * -1;
  } 
  if(speedY < 0 && y <= dia/2) {
    speedY = speedY * -1;
  }
}

1 个答案:

答案 0 :(得分:0)

您可以通过封装将圆圈绘制成所需的数据来获得多个圈子。它可能看起来像这样:

Circle c;

void setup() { 
  size(400, 200);
  c = new Circle();
}

void draw() {
  background(255);
  c.draw();
}

class Circle {
  color a = color(random(255), random(255), random(255), random(125, 250));
  float dia = random(60, 80);
  float x = random(dia/2, width-dia/2);
  float y = random(dia/2, height-dia/2);

  float speedX = random(-3, 3);
  float speedY = random(-3, 3);

  void draw() {
    noStroke();
    fill(a);
    ellipse(x, y, dia, dia);
    x = x + speedX;
    y = y + speedY;
    if (speedX > 0 && x >= width - dia/2) {
      speedX = speedX * -1;
    }
    if (speedX < 0 && x <= dia/2) {
      speedX = speedX * -1;
    }
    if (speedY > 0 && y >= height - dia/2) {
      speedY = speedY * -1;
    } 
    if (speedY < 0 && y <= dia/2) {
      speedY = speedY * -1;
    }
  }
}

然后要获得多个圈子,您只需创建Circle班级的多个实例,然后将其添加到ArrayList

ArrayList<Circle> circles = new ArrayList<Circle>();

void setup() { 
  size(400, 200);
  for (int i = 0; i < 5; i++) {
    circles.add(new Circle());
  }
}

void draw() {
  background(255);
  for (Circle c : circles) {
    c.draw();
  }
}

对于用户互动,请查看mousePressed()keyPressed()等事件方法。 The Processing reference应该是你的第一站。祝你好运。