当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;
}
答案 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
。