【问题标题】:Processing mouse hovering处理鼠标悬停
【发布时间】:2021-09-05 11:31:29
【问题描述】:

我是处理新手,我只是想画一些基本草图来熟悉它。 我已经制作了一个圆圈网格,当我将鼠标悬停在它上面时,我想更改一个圆圈的填充颜色。

color[] pastel = {#8dd3c7, #ffffb3, #bebada, #fb8072, #80b1d3, #fdb462, #7fc97f};
color[] palette = pastel;
int fc = palette[2];

int r = 40;
int s = 50;

void setup() {
  size(500, 500);
  smooth();
  noStroke();
  background(#e8e8e8);
//  background(#5e5e5d);
}

void draw() {
  for(int x = 0+s/2; x < width; x += s){
    for(int y = 0+s/2; y < height; y += s) {
      fill(fc);
      ellipse(x, y, r, r);
      
      if(dist(x, y, mouseX, mouseY) < r/2) {
    fc = palette[3];
  } else {
    fc = palette[2];
  }
}
  }

  }

虽然,鼠标坐标和改变填充颜色的圆之间存在偏移 - 改变颜色的那个是我悬停的那个下方的那个。 知道为什么吗? 谢谢!

【问题讨论】:

  • 你在画完椭圆后改变颜色。
  • 如果我在 ellipse() 函数之后写:fill(fc) 那么改变颜色的圆圈是我悬停的圆圈下方的两个圆圈
  • “改变颜色”是指“为fc分配新颜色。
  • 我在 for 循环的末尾编写了 fill() 和 ellipse() 命令,现在它可以工作了。谢谢!
  • 希望你能明白为什么:-)

标签: java processing


【解决方案1】:

我们需要存储圆心。好像你已经这样做了。然后,使用基本长度公式。这是我建议您使用的一种方法。

boolean overCircle(int centerX, int centerY, int radius) {
    return sqrt(pow(mouseX - centerX, 2) + pow(mouseY - centerY, 2))
    <= radius;
}

它检查从鼠标到圆心的直线的长度,如果该长度大于半径,显然它不再在圆的范围内。

如果您打算添加多个此类圆圈,我建议您将其变成一个对象。接下来,我们需要检查这个方法,所以在draw中,

if(overCircle(circleX, circleY, r) {
    circleColor = hoveringColor;
} else circleColor = notHoveringColor;
fill(circleColor);
circle(circleX, circleY);

希望这会有所帮助。祝你有美好的一天。

【讨论】:

    猜你喜欢
    • 2012-09-11
    • 2012-04-30
    • 1970-01-01
    • 2011-08-04
    • 2018-09-03
    • 1970-01-01
    • 2015-04-22
    • 2011-05-26
    • 2017-10-14
    相关资源
    最近更新 更多