Как прекратить предотвращать постоянный вызов SamplePlayer и println в регионе? - PullRequest
0 голосов
/ 03 апреля 2019

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

Однако моя логическая установка до сих пор означает, что она постоянно печатает в консоли, что что-то обнаруживается, и воспроизводит аудиофрагмент быстро, пока я не уберу руку.

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

Как мне настроить булеву функцию, чтобы исправить это?

if (blob.getRect().intersects(screenRects.get(0))){
   println("INSIDE_REGION1" + millis());
   String filename = dataPath("bubble.mp3");
   SamplePlayer sp = new SamplePlayer(ac,            
                                      SampleManager.sample(filename));
   ac.out.addInput(sp);           
}

Я ожидаю, что он напечатает INSIDE_REGION1 миллисекунды один раз, а затем снова, если я вытащу руку назад и вернусь обратно.

1 Ответ

0 голосов
/ 03 апреля 2019

Попробуйте добавить логическое значение. false по умолчанию превращается в true, как только ваш код запускается один раз, так что вы можете узнать, был ли переключатель println() переключен или нет. Когда вы уберете руку, логическое значение снова превратится в false.

РЕДАКТИРОВАТЬ: Примерно так:

boolean beenPrinted = false;

if (blob.getRect().intersects(screenRects.get(0)) && !beenPrinted){
   println("INSIDE_REGION1"+millis());
   String filename = dataPath("bubble.mp3");
   SamplePlayer sp = new SamplePlayer(ac,            
                                      SampleManager.sample(filename));
   ac.out.addInput(sp);
   beenPrinted = true;
}
...