Java中Processing的setFill方法失效问题求助
解决PShape setFill失效的问题
嘿,我来帮你搞定这个矩形颜色无法更新的问题!你的代码里有几个关键问题导致setFill不起作用,我来一步步拆解并修复:
问题分析
- setup函数语法错误:你的
setup少了括号,应该写成void setup() - PShape创建方式错误:在
d.beginShape()内部调用rect()是无效的——rect()是直接绘制到画布的函数,不会被PShape捕获。你需要用vertex()来手动定义矩形的四个顶点,这样PShape才能正确存储形状数据。 - disableStyle的影响:你调用了
d.disableStyle(),这会让PShape忽略自身的填充、描边样式,转而使用当前绘图上下文的样式(也就是draw()里设置的样式),所以你调用setFill自然不会生效。 - 鼠标事件处理不当:在draw()里判断鼠标位置不如直接用
mousePressed()函数更直观,专门处理点击事件。
修复后的完整代码
PShape d; void setup() { size(600, 600); // 正确创建PShape矩形:用vertex定义顶点 d = createShape(); d.beginShape(); // 初始填充色 d.fill(100); // 定义矩形四个顶点(x,y对应左上角、右上角、右下角、左下角) d.vertex(0, 0); d.vertex(200, 0); d.vertex(200, 200); d.vertex(0, 200); d.endShape(CLOSE); // 不要调用disableStyle,保留PShape自身的样式控制权 } void draw() { background(255); // 绘制PShape,参数是形状对象+偏移位置 shape(d, 300, 250); } void mousePressed() { // 判断点击是否在矩形范围内(要考虑shape的偏移量300,250) if (mouseX >= 300 && mouseX <= 300+200 && mouseY >=250 && mouseY <=250+200) { // 随机生成新的填充色,也可以用固定色 d.setFill(color(random(255), random(255), random(255))); // 如果你之前不小心调用了disableStyle,需要重新启用才能让setFill生效: // d.enableStyle(); } }
关键说明
- PShape的顶点定义:因为我们在绘制shape时添加了偏移(300,250),所以创建PShape时把矩形的顶点设为从(0,0)开始的局部坐标,这样更灵活。
- 样式控制:保留PShape的样式启用状态(默认就是启用的,不用额外调用enableStyle),这样
setFill的修改才会被应用到形状上。 - 点击范围判断:要把shape的偏移位置算进去,因为
shape(d,300,250)是把PShape的局部坐标(0,0)映射到画布的(300,250)位置,所以矩形的实际范围是300-500 x 250-450。
这样修改后,每次点击矩形区域,它就会自动切换颜色,而且不需要重新绘制整个形状,完全符合你的需求!
内容的提问来源于stack exchange,提问作者helen v
相关产品推荐
相关产品推荐

