在处理中将true语句返回false

时间:2019-04-11 05:05:14

标签: java boolean processing kinect

当Kinect在矩形区域中检测到对象时,我正在尝试播放音频样本。问题是我目前已对其进行设置,使其播放一次样本,然后将区域更改为如果我移出该区域,则不播放其他样本。

我如何制作它,以便每次我在该区域中移动时都能播放,并在移出以再次切换后重置它?

我尝试使用单独的布尔函数,例如:

else if (region1 = true){ 
region1 = false;
}

但这似乎不起作用。我认为我需要在该函数中工作,而不是创建一个新函数将其重置为false。

这里是我到目前为止所得到的:

boolean region1 = false;

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

3 个答案:

答案 0 :(得分:0)

else if(region1 = true)更改为else if(region1 == true)。 =是赋值运算符。

答案 1 :(得分:0)

假设您实现了注释中的建议,并且代码现在如下所示:

   if (blob.getRect().intersects(screenRects.get(0)) && !region1){
     println("region1-"+millis());
       String filename = dataPath("sample.wav");
           SamplePlayer sp = new SamplePlayer(ac, SampleManager.sample(filename));
           ac.out.addInput(sp);
     region1 = true;
   } 
   else if (region1 == true){ 
     region1 = false;
   }

发生的事情是,当检测到该区域中的某个对象时,会播放音频并将region1设置为true。接下来的帧else if运行,并且region1再次设置为false。这意味着之后的帧(如果仍然存在对象)将再次播放音频。
region1变量表示“对象已进入区域”,并且仅当该区域中没有对象时才应重置。试试这个:

boolean isObjectInRegion;

   isObjectInRegion= blob.getRect().intersects(screenRects.get(0));
   if (isObjectInRegion && !region1){
     println("region1-"+millis());
       String filename = dataPath("sample.wav");
           SamplePlayer sp = new SamplePlayer(ac, SampleManager.sample(filename));
           ac.out.addInput(sp);
     region1 = true;
   } 
   else if (!isObjectInRegion && region1 == true){ 
     region1 = false;
   }

含义:如果该区域中有一个对象,但现在不再存在,则重置region1。然后,当对象重新进入该区域时,它将触发音频。

答案 2 :(得分:-1)

这是否可能是由于多线程而发生的?如果所做的更改和查询发生在两个不同的线程中,则必须采取更多的预防措施。例如,将您要检查的布尔值定义为volatile