Как я могу очистить/сбросить холст со счетчиком или обратным отсчетом в Обработке?

Я хотел бы знать, как я могу установить цикл сброса: Пока выполняется 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;
  }
}

Спасибо за помощь советом!

Пожалуйста, добавьте код того, что вы уже пробовали.

Rick 12.06.2019 11:19
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
1 534
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто снова очистить фон, например, при нажатии клавиши:

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(), он должен быть автоматическим, поэтому я искал счетчик.

Valerio 12.06.2019 11:53

Более длинный фрагмент кода выше делает это каждые 3 секунды. Ты это пробовал ?

George Profenza 12.06.2019 13:14

Другие вопросы по теме