Я хотел бы знать, как я могу установить цикл сброса: Пока выполняется draw(), я хотел бы очистить холст, чтобы снова и снова начинать рисовать на чистом холсте.
(Я не хочу использовать keyPressed() или mousePressed(), это должно быть автоматически)
import ddf.minim.*;
Minim minim;
AudioInput in;
void setup() {
minim = new Minim(this);
minim.debugOn ();
in = minim.getLineIn(Minim.MONO, 100);
fullScreen();
background(255, 60, 80);
}
void draw() {
float soundlevel;
float distance_top = random(100);
int t;
int interval = 10;
String time = "010";
soundlevel = in.mix.get(0);
stroke(255, random(90, 255));
line(0, distance_top + soundlevel * 4000, width, distance_top + soundlevel * 1000);
line(0, distance_top + soundlevel * 1000, width, distance_top + soundlevel * 4000);
t = interval-int(millis()/100);
time = nf(t, 3);
if (t == 0) {
redraw();
interval = interval +10;
}
}
Спасибо за помощь советом!




Вы можете просто снова очистить фон, например, при нажатии клавиши:
void keyPressed(){
background(255, 60, 80);
}
Вы можете сделать то же самое с другим событием (количество времени, громкость и т. д.).
Вот пример, основанный на вашем коде, который очищает фон каждые 3 секунды:
import ddf.minim.*;
Minim minim;
AudioInput in;
//3s as millis
int interval = 3 * 1000;
int time;
void setup() {
fullScreen();
background(255, 60, 80);
time = millis();
minim = new Minim(this);
//minim.debugOn ();
in = minim.getLineIn(Minim.MONO, 100);
}
void draw() {
float soundlevel;
float distance_top = random(100);
soundlevel = in.mix.get(0);
stroke(255, random(90, 255));
line(0, distance_top + soundlevel * 4000, width, distance_top + soundlevel * 1000);
line(0, distance_top + soundlevel * 1000, width, distance_top + soundlevel * 4000);
if (millis() - time >= interval){
// clear background
background(255, 60, 80);
// reset time for next interval
time = millis();
// debug
println("=========================> tick");
}
}
Для получения дополнительной информации о millis() для задержки см. этот ответ
Другой вариант — выполнить расчет кадра на основе frameCount.
Например, если frameRate скетча составляет около 60 кадров в секунду, и вы хотите очищать примерно каждые 3 секунды, вы можете проверить, прошли ли кратные 180 (3 * 60) кадры в тандеме с оператор по модулю (%).
import ddf.minim.*;
Minim minim;
AudioInput in;
void setup() {
//fullScreen();
size(300,300);
background(255, 60, 80);
minim = new Minim(this);
//minim.debugOn ();
in = minim.getLineIn(Minim.MONO, 100);
}
void draw() {
float soundlevel;
float distance_top = random(100);
soundlevel = in.mix.get(0);
stroke(255, random(90, 255));
line(0, distance_top + soundlevel * 4000, width, distance_top + soundlevel * 1000);
line(0, distance_top + soundlevel * 1000, width, distance_top + soundlevel * 4000);
if (frameCount % (3 * 60) == 0){
// clear background
background(255, 60, 80);
// debug
println("=========================> tick");
}
}
Я не хочу использовать keyPressed() или mousePressed(), он должен быть автоматическим, поэтому я искал счетчик.
Более длинный фрагмент кода выше делает это каждые 3 секунды. Ты это пробовал ?
Пожалуйста, добавьте код того, что вы уже пробовали.