我正在处理Processing中的一个项目,当IR传感器读取不同的东西时,我最终将使用Arduino和IR传感器在背景图像上加载图像。所以目前我正在尝试编写一个程序,如果某个值介于两个值之间,程序将在后台(bground)上加载一个gif(gif1.gif)。我现在正在使用mouseX和Y,因为它们非常容易测试(如果鼠标坐标在两个参数范围内,则会加载图像)。
这是当前的代码:
PImage bground;
PImage PictureFrame;
int pointillize = 10;
void setup () {
size (1920,1080);
noFill();
bground = loadImage("background.png");
PictureFrame = loadImage("gif1.gif");
background (0);
image(bground,0,0);
}
void draw(){
int x = mouseX;
int y = mouseY;
int loc = x+y*bground.width;
noStroke();
while (loc > 740 && loc < 1170) {
image(PictureFrame,740,20);
}
}
但它似乎不起作用!有帮助吗? 如果不清楚,则加载背景图像。我希望它加载gif1 WHILE鼠标位于指定的像素之间,这是图像的中间位置。
谢谢!
答案 0 :(得分:0)
请养成debugging your code的习惯。使用Processing编辑器附带的调试器,或使用一些println()
语句来了解正在发生的事情。
特别是,请看这段代码:
while (loc > 740 && loc < 1170) {
image(PictureFrame,740,20);
}
了解while
循环继续重复,直到不再满足其条件。由于loc
循环内未更新while
,这意味着将始终满足条件,并且此循环将永远不会退出。
要了解我的意思,请在循环中添加println()
语句:
while (loc > 740 && loc < 1170) {
println("inside while loop");
image(PictureFrame,740,20);
}
你会注意到这会打印出来然后永不停止。基本上你已经冻结了你的程序。
而不是while
循环,我猜你只需要一个if
语句:
if (loc > 740 && loc < 1170) {
println("inside if statement");
image(PictureFrame,740,20);
}
现在每帧只执行一次,你的代码不会冻结。
另请注意,我不确定您使用loc
变量做了什么。请直接尝试使用mouseX
和mouseY
。