Processing调用random()从颜色数组取随机描边颜色报错如何解决
错误原因
Processing内置的random()函数不支持直接传入数组作为入参,它仅支持以下三类调用形式:
- 无参数:返回0~1区间的随机浮点数
- 单个数值(int/float)参数:返回0到该参数值区间的随机浮点数
- 两个数值(int/float)参数:返回两个参数值构成的闭开区间内的随机浮点数
直接传入colors数组不符合参数类型要求,因此会抛出需要float类型参数的报错。
修复方案
要从预定义颜色数组中随机选取颜色,需要先构造合法的数组随机索引,再通过索引读取对应颜色值:
- 读取颜色数组的长度,传入
random()生成0到数组长度之间的随机浮点数 - 将生成的随机浮点数强转为int类型——数组索引必须为整数,且
random(参数值)返回的结果始终小于传入的参数值,强转后得到的索引范围是0到数组长度-1,不会出现数组越界问题 - 用得到的随机索引从
colors数组中取出对应颜色,传入stroke()即可
修正后的setup()函数代码如下:
void setup() { size(1080, 720); // 生成随机索引并读取对应颜色 int randomColorIdx = (int)random(colors.length); stroke(colors[randomColorIdx]); d = new drop[n]; for(int i = 0; i < d.length; i ++) { d[i] = new drop(random(width), random(-10, 20), random(5)); } }
补充提示:上述写法是在初始化阶段随机选一个全局描边色,所有雨滴都会用这同一个颜色。如果需要每个雨滴使用独立的随机颜色,需要把随机取色的逻辑移到
drop类的show()方法内,每次绘制单个雨滴前单独取色即可。
内容的提问来源于stack exchange,提问作者Liz
相关产品推荐
相关产品推荐

