三个球体的不同速度

different speed of three sphere

我是处理方面的新编码器,这就是为什么请 gentle.I 为您制作一个简单的代码。通常我的代码比较长complex.However,我写了一个简单的代码给你

//main class
ArrayList<Clouds> clouds = new ArrayList();

void setup() {
  size(1200, 800, P3D);

  for (int i = 0; i < 3; i++)
  {
    Clouds C = new Clouds();
    clouds.add(C);
  }
}

void draw() {
  background(0); 
  for (int i = 0; i < clouds.size(); i++)
  {
    clouds.get(i).drawClouds();
  }
}

//Clouds class

class Clouds
{
  float xC, yC, zC, speedC;
  public Clouds()
  {
    xC = 20;
    yC = 40;
    zC = 0;
    noStroke();
    speedC = 1;
  }
  public void drawClouds()
  {
    translate(xC,yC);
    pushMatrix();
    makingClouds(100, 100, 100);
    popMatrix();
    if (xC > width - 780) {
      xC = -660; 
    }
    xC += speedC; 
  }
  public void makingClouds(float xF, float yF, float zF ) {
    translate(xF, yF, zF);
    pushMatrix();
    lights();
    scale(1, 1, 1);
    sphere(20);
    popMatrix();
  }
}

我希望,我在这里写两个 class 没有做错,但我已经工作了整整两天,让我感到恶心。所以我的问题是:如您所见,有三个球体,它们具有相同的速度,但是当我 运行 程序时,它们以不同的速度结束。他们怎么有相同的速度?如果你帮助我,你就是我的英雄!谢谢。

translate()不只是设置一个平移,它定义了一个平移矩阵,并将新的平移矩阵乘以当前矩阵。

你必须在不同的位置构建云:

void setup() {
    // [...]

    for (int i = 0; i < 3; i++) {
        Clouds C = new Clouds(20, i*40);
        clouds.add(C);
    }
} 
class Clouds {

    float xC, yC, zC, speedC;

    public Clouds(float x, float y) {
        xC = x;
        yC = y;
        zC = 0;

        // [...]
}

并在 pushMatrix() / popMatrix() 块中移动 translate

class Clouds {
    // [...]

    public void drawClouds() {

        pushMatrix();
        translate(xC,yC);

        // [...]

        popMatrix();

        // [...]
    }

    public void makingClouds(float xF, float yF, float zF ) {
        pushMatrix();
        translate(xF, yF, zF);

        // [...]

        popMatrix();
    }

示例代码:

//main class
ArrayList<Clouds> clouds = new ArrayList();

void setup() {
    size(1200, 800, P3D);

    for (int i = 0; i < 3; i++) {
        Clouds C = new Clouds(20, i*40);
        clouds.add(C);
    }
}

void draw() {
    background(0); 
    for (int i = 0; i < clouds.size(); i++) {
        clouds.get(i).drawClouds();
    }
}

//Clouds class

class Clouds {

    float xC, yC, zC, speedC;

    public Clouds(float x, float y) {
        xC = x;
        yC = y;
        zC = 0;
        speedC = 1;
    }

    public void drawClouds() {
        noStroke();
        pushMatrix();
        translate(xC,yC);
        makingClouds(100, 100, 100);
        popMatrix();

        if (xC > width - 780) {
            xC = -660; 
        }
        xC += speedC; 
    }

    public void makingClouds(float xF, float yF, float zF ) {
        pushMatrix();
        translate(xF, yF, zF);
        lights();
        scale(1, 1, 1);
        sphere(20);
        popMatrix();
    }
}