封装前:所有步骤挤在 draw() 里
循环、颜色、渐变、噪声采样和形状绘制彼此嵌套;修改一个环节时,需要重新读完整段代码。
function draw() {
background(palette[0]);
for (let layer = 0; layer <= WAVE_COUNT; layer++) {
let y = layer * layerStep;
let colors = [palette[layer % 5], palette[(layer + 2) % 5]];
let gradient = drawingContext.createLinearGradient(0, 0, width, 0);
gradient.addColorStop(0, colors[0]);
gradient.addColorStop(1, colors[1]);
push();
translate(0, y);
drawingContext.fillStyle = gradient;
beginShape();
for (let x = 0; x <= width; x += X_STEP) {
let waveY = map(noise(x * 0.004, layer * 0.12, t), 0, 1, -76, 76);
vertex(x, waveY);
}
vertex(width, height - y);
vertex(0, height - y);
endShape(CLOSE);
pop();
}
}