如何在鼠标悬停时将图像加载到另一个上面?

时间:2018-04-01 16:13:00

标签: processing

我正在处理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鼠标位于指定的像素之间,这是图像的中间位置。

谢谢!

1 个答案:

答案 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变量做了什么。请直接尝试使用mouseXmouseY