首页 > 解决方案 > 如何重绘 - 在处理中重新启动循环

问题描述

我想重置在草图中运行的“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");
  }
}

标签: javaloopsprocessingrestartredraw

解决方案


只需将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;,它将增加big1:

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;
    }

    // [...]

}

推荐阅读