在Processing中将true语句返回false

问题描述 投票:0回答:3

我正在尝试在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;
       } 
java boolean processing kinect
3个回答
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-variable表示“对象已进入区域”,只有在区域中没有对象时才应重置。试试这个:

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


0
投票

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.