Processing中将多个自定义形状设为可点击按钮的合理实现方案咨询
Processing实现DHD不规则梯形按钮点击检测方案
你的需求完全可以在Processing中实现,以下是两种成熟的落地路径,都可以避免手动逐个校验坐标:
方案1:颜色拾取检测(优先推荐,适配你的现有代码)
这是处理大量自动生成不规则形状点击的最优方案,实现逻辑非常简单:
- 用
createGraphics()创建一个和画布尺寸完全一致的离屏缓冲层 - 给每一个梯形分配唯一的无重复RGB颜色值,比如第1个梯形对应
color(255,0,0)、第2个对应color(255,0,1),以此类推,把颜色值和梯形ID做一个映射表 - 每次画布渲染时,同步在离屏缓冲层绘制所有梯形:缓冲层里的梯形只填充对应唯一纯色,不要加描边、渐变、光影等任何特效,和显示层的视觉绘制完全隔离
- 鼠标点击时直接调用
缓冲层对象.get(mouseX, mouseY)获取点击位置的颜色,匹配映射表就能直接拿到对应的梯形ID,完全不需要做坐标计算 - 该方案性能开销极低,哪怕几百个按钮也不会有卡顿,而且你现有500行自动生成的形状代码只需要批量加颜色映射逻辑,改造量极小
方案2:PShape实例遍历检测
如果你后续需要给按钮加悬停、点击动效,可选择该方案:
- 把散写的
beginShape()/endShape()代码批量重构,每个梯形生成一个独立的PShape实例,所有实例统一存入ArrayList<PShape>集合 - 鼠标点击时遍历集合,调用
PShape.contains(mouseX, mouseY)方法即可直接判断点击是否命中当前形状 - 你这个场景最多只有几十上百个梯形,遍历检测的性能消耗可以忽略,完全不会出现卡顿问题
落地建议:优先选择颜色拾取方案,不需要修改现有形状的顶点参数,只需要新增映射逻辑和离屏缓冲层绘制逻辑即可,最快几小时就能完成功能开发。
内容的提问来源于stack exchange,提问作者ThePatchelist
相关产品推荐
相关产品推荐

