【问题标题】:Creating a Fireworks Simulation in Processing在处理中创建烟花模拟
【发布时间】:2022-01-16 09:13:17
【问题描述】:

我有一个任务,我必须使用处理进行火灾模拟。我的目标是制作一个可以射出多个椭圆的圆形烟花。可以找到我正在尝试完成的图像here

我现在的代码似乎是在螺旋中绘制椭圆。如果有人想尝试一下,我已将代码的下载链接复制粘贴到底部。

Code link:

ArrayList<Ball> ballList;
int timer;
int amount;
int ball;
float angle;
boolean draws;
Ball b;

void setup() {
  size(1300, 700);

  ballList = new ArrayList<Ball>(ball);
  ball= 36;
  amount = 1000;
}

void draw() {
  background(0);
  for (int i = ballList.size()-1; i > -1; i--) {
    for (int k = 0; k < ball; k++) {
      Ball b = ballList.get(i);
      fill(255, 0, 0, b.a);
      b.display();
    }// for loop
  }// for loop
}// void draw

void mousePressed() {
  for (int j = 0; j < ball; j++) {
    ballList.add (new Ball(angle));
  }
}

class Ball {
  float X;
  float Y;
  float rad;
  float mx;
  float my;
  float a;
  float draw;
  color c = color(random(0, 255), random(0, 255), random(0, 255));
  float d;
  
 float angle;
  float X2;
  float Y2;
  float angle2;
  float x;
  float y;
  
  Ball(float _angle) {
    X = mouseX; //mouse X
    Y = mouseY; //mouseY;
    d = 0;
    rad= 10;
    angle = _angle;
    a = 255;
    
    
  }//Ball
  void display() { // draw the ball and fill in colour
    
noStroke();
   a--;
    d++;
    angle += 10;
    if (angle >= 360) {
      angle = 0;
    }
    angle2 = radians(angle);
    X2 = cos(angle2) * d + X; 
    Y2 = sin(angle2) * d + Y;
    a -= 0.5;
    ellipse(X2, Y2, rad, rad);
  }// void display
}

【问题讨论】:

标签: processing ellipse


【解决方案1】:

您看到螺旋的原因是您在绘制每个球之前更新了它的位置,使它们与您绘制的每个球有点不同步。 如果您在绘制之前先更新每个球的位置,您将获得您正在寻找的效果。

【讨论】:

    【解决方案2】:

    问题是您多次绘制同一个球,每次都移动它。相反,您应该分开移动球的逻辑并像这样显示它

    void update() { // update the ball
        d++;
        a--;
    }//void update
    
    void display() { // draw the ball and fill in colour
        noStroke();
        angle += 10;
        if (angle >= 360) {
            angle = 0;
        }
        angle2 = radians(angle);
        X2 = cos(angle2) * d + X; 
        Y2 = sin(angle2) * d + Y;
        ellipse(X2, Y2, rad, rad);
    }// void display
    

    然后,确保每个球只调用一次更新函数

    for (int i = ballList.size()-1; i > -1; i--) {
        Ball b = ballList.get(i);
        b.update();
        for (int k = 0; k < ball; k++) {
            fill(255, 0, 0, b.a);
            b.display();
        }// for loop
    }// for loop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      相关资源
      最近更新 更多