разная скорость трех сфер - PullRequest
1 голос
/ 03 мая 2020

Я новый программист по обработке, поэтому, пожалуйста, будьте осторожны. Я сделал простой код для вас. Обычно мой код более длинный и сложный. Однако я написал для вас простой код.

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

Надеюсь, я не ошибаюсь, когда пишу два класса здесь, но я работал над этим два целых дня и меня тошнило. Итак, мой вопрос: как вы видите, есть три сферы и они имеют одинаковую скорость, но когда я запускаю программу, они go заканчиваются с разными скоростями. Как они имеют одинаковую скорость? Если ты поможешь мне, ты станешь моим героем! Спасибо.

1 Ответ

1 голос
/ 03 мая 2020

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;

        // [...]
}

И для перемещения translate в pushMatrix() / popMatrix() блок:

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