processing.js 中的鼠标悬停和鼠标跟踪

mouseOver and mouse Tracking in processing.js

你好,我正在尝试在二维数组上跟踪鼠标,在每次销售中我都会得到一个正方形,我想做的是当我的鼠标越过某个正方形使其变红时,但是当我把鼠标悬停在草图上,其中一堆是红色的,有什么办法可以解决这个问题吗?这是代码:对不起我的英语。

int[][] back =new int[3][3];
int pad = 10, bs=100, len=pad*(back.length+1)+bs*back.length;

void setup(){
  size(500,500);
  noStroke();
}

void draw(){
 background(255); 
 rectt(0,0,width,height,color(100));
 for(int row=0;row<back.length;row++)
   for(int coll=0;coll<back[row].length;coll++){
     float x = pad+(pad+bs)*coll;
     float y = pad+(pad+bs)*row;
     rectt(x,y,bs,bs,color(150));
     if(mouseX > x && mouseY<y){
      rectt(x,y,bs,bs,color(255,0,0));
     }
   }
}


void rectt(float x, float y, float w, float h, color c){
 fill(c);
 rect(x,y,w,h);
}

看这行代码:

if(mouseX > x && mouseY<y){
   rectt(x,y,bs,bs,color(255,0,0));
}

您究竟希望 if 语句做什么?请绘制一些示例网格并针对一堆不同的点执行 if 语句。

希望这将证明您的逻辑在这里没有意义。您正在检查 mouseX > x,这意味着该点位于单元格的右侧。到目前为止这是有道理的。但随后您还要检查是否 mouseY < y,这意味着该点位于单元格上方。那没有意义!您正在为单元格右侧和上方的所有单元格着色。

相反,您需要检查鼠标位置是否在单元格内部。这通常是 4 个检查:

  • 鼠标是否在单元格左边缘的右侧?
  • 鼠标是否在单元格右边缘的左侧?
  • 鼠标是否在单元格的上边缘下方?
  • 鼠标是否在单元格的底部边缘上方?

您可以通过将单元格宽度和高度添加到其 xy 位置来获得单元格的右边缘和底边缘。