Return Processing 中的 true 语句返回 false

Return a true statement back to false in Processing

我正在尝试在 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;
       } 

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

会不会是多线程的缘故?如果您所做的更改和查询发生在两个不同的线程中,您将不得不采取更多的预防措施。例如,将您检查的布尔值定义为 volatile.

假设您实施了评论中的建议并且您的代码现在如下所示:

   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 设置为真。下一帧,else if 运行并且 region1 再次设置为 false。这意味着之后的帧,如果对象仍然存在,音频将再次播放。
region1 变量表示 'object has entered region',并且只有在该区域中不存在对象时才应重置。试试这个:

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。当物体重新进入该区域时,它将触发音频。