You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing中如何实现鼠标悬停时多个矩形变色的效果

Processing 多矩形悬停独立变色实现方案

核心思路

你原来的单矩形代码只存储了一组矩形属性,要实现多矩形独立变色,只需要把每个矩形的属性和逻辑封装复用即可,具体步骤如下:

  • 自定义矩形类,把单个矩形的位置、尺寸、颜色、悬停判断、绘制逻辑全部打包封装
  • 用数组存储多个矩形实例,初始化时给每个矩形分配不同的位置和颜色
  • 渲染时遍历所有矩形,逐个判断悬停状态后独立绘制

完整可运行代码

// 自定义矩形类,封装单个矩形的所有属性和判断逻辑
class HoverRect {
  float x, y, size;
  color baseColor, hoverColor;
  boolean isOver;

  // 构造函数,初始化矩形属性
  HoverRect(float x, float y, float size, color base, color hover) {
    this.x = x;
    this.y = y;
    this.size = size;
    this.baseColor = base;
    this.hoverColor = hover;
    this.isOver = false;
  }

  // 判断鼠标是否悬停在当前矩形上
  boolean checkOver() {
    return mouseX >= x - size/2 && mouseX <= x + size/2 &&
           mouseY >= y - size/2 && mouseY <= y + size/2;
  }

  // 更新状态并绘制矩形
  void display() {
    isOver = checkOver();
    stroke(255);
    fill(isOver ? hoverColor : baseColor);
    rect(x, y, size, size);
  }
}

// 存储所有矩形的数组,可随意修改数量
HoverRect[] rects = new HoverRect[4];
int rectSize = 90;

void setup() {
  size(640, 360);
  rectMode(CENTER);
  // 初始化4个矩形,2行2列排布,每个矩形悬停颜色不同
  rects[0] = new HoverRect(width/2 - 100, height/2 - 60, rectSize, color(0), color(255, 0, 0));
  rects[1] = new HoverRect(width/2 + 100, height/2 - 60, rectSize, color(0), color(0, 255, 0));
  rects[2] = new HoverRect(width/2 - 100, height/2 + 60, rectSize, color(0), color(0, 0, 255));
  rects[3] = new HoverRect(width/2 + 100, height/2 + 60, rectSize, color(0), color(255, 255, 0));
}

void draw() {
  background(102);
  // 遍历所有矩形完成更新和绘制
  for (HoverRect r : rects) {
    r.display();
  }
}

优化建议

  • 需要新增矩形只需要修改数组长度,在setup中添加对应实例即可,无需重复编写悬停判断逻辑
  • 可以给不同矩形自定义尺寸、基础色、悬停色,实现更丰富的视觉效果
  • 后续需要添加点击、拖拽等交互时,直接把对应逻辑加在HoverRect类中即可,维护成本极低

内容的提问来源于stack exchange,提问作者LiZhu0602

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:45:03