Processing如何实现鼠标悬停时对应按钮单独高亮变色
问题根因
- 全局共用同一个
COLOR变量,修改后所有按钮颜色都会同步变更,无法实现单个按钮高亮 - 悬停判断逻辑只适配了第一个按钮的坐标范围,没有对应每个按钮的实际横向位置
buttonX全局变量在每次draw()执行时没有重置,多次运行后按钮会绘制到画布外
修复方案
把按钮的坐标、颜色判断都收敛到单次按钮绘制逻辑里,不要用全局变量存储按钮坐标和颜色:
// 不需要弹窗的话可以删掉这行import import javax.swing.JOptionPane; final int BUTTON_WIDTH = 100; final int BUTTON_HEIGHT = 50; void setup() { size(800, 400); } void draw() { // 每次绘制前清屏,避免画面重叠 background(255); for (int i = 0; i <= 8; i++) { // 直接通过索引计算当前按钮的X坐标,不需要全局变量存储 int currentBtnX = i * BUTTON_WIDTH; drawButtons(currentBtnX); } } // 传入当前要绘制的按钮的X坐标 void drawButtons(int btnX) { strokeWeight(2); // 单独判断当前按钮区域是否被鼠标悬停 if (mouseX >= btnX && mouseX < btnX + BUTTON_WIDTH && mouseY >=0 && mouseY < BUTTON_HEIGHT) { // 悬停时用高亮色 fill(0, 255, 255); } else { // 普通状态用默认色 fill(0, 150, 150); } rect(btnX, 0, BUTTON_WIDTH, BUTTON_HEIGHT); }
内容的提问来源于stack exchange,提问作者processingboy1
相关产品推荐
相关产品推荐

