Как перерисовать - перезапустить цикл в Processing

Я хотел бы сбросить цикл for, который выполняется в скетче, без использования keyPressed() или mousePressed(), это должно происходить автоматически.

Когда штрих будет охватывать большую часть области холста или когда он выходит за пределы ширины/высоты, я хотел бы перезапустить эскиз.

В предыдущем скетче я ставил счетчик, он работал, потому что не было цикла for, а в этом из-за него счетчик не работает.

int interval = 5 * 1000;
int time;

float cer;
float big = 14;

void setup() {
  size(595, 842);
  background(255);
}

void draw() {
  strokeWeight(cer);
  stroke(0);
  noFill();
  ellipse(width/2, height/2-100, 200, 200);
  ellipse(width/2, height/2+100, 200, 200);

  cer = cer + big;

  if (cer < width) {
    big = +1;
  }

  if (millis() - time >= interval) {
    // clear background
    background(255);
    // reset time for next interval
    time = millis();
    // debug
    println("=========================>  tick");
  }
}


person Valerio    schedule 16.06.2019    source источник


Ответы (1)


Просто верните значения cer и big в исходное состояние, и вам нужно очистить фон, когда процесс должен быть перезапущен:

float cer = 0;
float big = 14;
void draw() {

    // [...]

    cer = cer + big;

    if (cer < width) {
        big = +1;
    } else {
        // clear background
        background(255);

        // reset to initial state 
        cer = 0;
        big = 14;
    }

    // [...]
} 

Обратите внимание, big = +1; совпадает с big = 1;. Я просто присваиваю 1 значению big.
Вероятно, вы искали big += 1;, которое увеличивает big на 1:

float cer = 0;
float big = 0;

void draw() {

    // [...]

    cer = cer + big;

    println(cer, big);
    if (cer < width) {
        big += 1;
    } else {
        background(255);
        cer = 0;
        big = 0;
    }

    // [...]

}
person Rabbid76    schedule 16.06.2019