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