Processing点击鼠标生成随机四边形代码无法运行,请求排查错误与修复方案
代码存在的核心问题
- 变量作用域错误:在
setup()函数内部声明的所有坐标变量(a~h)、颜色变量(red、green、blue)都是局部变量,仅在setup函数内部生效,drawQuad()和draw()函数无法访问这些变量,运行时会直接报变量未定义错误。 - 类型不匹配:Processing中
random()函数返回的是float浮点类型,直接赋值给int类型变量会触发类型错误。 - 随机值仅生成一次:当前逻辑里随机坐标和颜色仅在程序启动的setup阶段生成一次,无法实现每次点击鼠标生成新随机四边形的需求。
- 颜色参数顺序错误:Processing的
fill()、stroke()函数的颜色参数顺序为红、绿、蓝,原代码写为fill(red,blue,green),会导致实际显示颜色和预期不符。 - size()调用位置错误:
size()函数需要放在setup()函数的第一行执行,否则可能引发画布初始化异常。
修复方案
- 将所有坐标、颜色变量声明为全局变量,在所有函数外部定义,保证所有函数都可以正常访问。
- 将变量类型改为float,匹配
random()函数的返回值类型。 - 把随机值生成逻辑移到
drawQuad()函数内部,保证每次调用都会生成新的随机坐标和颜色。 - 调整
size()调用位置到setup第一行,可根据需求添加background()控制是否清除之前的画布内容。
修复后完整可运行代码
// 定义全局变量 float a,b,c,d,e,f,g,h; float red, green, blue; void setup(){ size(500,400); // 初始化背景为白色 background(255); } void drawQuad() { // 每次生成四边形前重新生成随机参数 a = random(1,500); b = random(1,400); c = random(1,500); d = random(1,400); e = random(1,500); f = random(1,400); g = random(1,500); h = random(1,400); red = random(1,255); green = random(1,255); blue = random(1,255); fill(red,green,blue); stroke(red,green,blue); quad(a,b,c,d,e,f,g,h); } void draw() { // 如果需要每次点击仅显示最新的四边形,可解开下面这行注释 // background(255); if (mousePressed) { drawQuad(); } }
内容的提问来源于stack exchange,提问作者TechStorm
相关产品推荐
相关产品推荐

