You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

p5.js随机生成连续垂直区块失败问题求助

问题根源

你的代码错误地将单个区块的宽度值当作了区块的起始位置。sectionsWidths数组存储的是每个区块的宽度,而非累计偏移量,导致从第2个区块开始,begin = sectionsWidths[i]取到的是新的随机宽度,而非前一个区块的结束位置。

修复方案

需要维护一个累计偏移量跟踪每个区块的起始位置:

  1. 移除sectionsWidths初始的0,直接生成10个随机宽度值
  2. 用变量记录当前起始位置,每个区块的起始位置等于上一个区块的结束位置,结束位置等于起始位置加上当前区块的宽度
修改后的代码
function vertBG() {
  let sectionsWidths = []
  // 生成10个区块的随机宽度
  for (let i = 0; i < 10; i++) {
    let sectionWidth = random(w(.13), w(.3))
    sectionsWidths.push(sectionWidth)
  }
  
  let sections = []
  let currentStart = 0 // 跟踪当前区块的起始位置
  for (let i = 0; i < sectionsWidths.length; i++) {
    let sectionWidth = sectionsWidths[i]
    let begin = currentStart
    let end = currentStart + sectionWidth
    sections.push([begin, end])
    // 更新起始位置为当前区块的结束位置
    currentStart = end
  }
  
  console.log(sectionsWidths)
  console.log(sections)
  
  // 绘制纹理线条的逻辑保持不变
  for (let i = 0; i < sections.length; i++) {
    for (let x = sections[i][0]; x < sections[i][1]; x += w(.01)) {
      let r = random(155,255)
      let g = random(155,255)
      let b = random(155,255)
      texStr(x, 0, x, height, w(.2), r, g, b, 50)
    }
  }
}
验证效果

修改后sections数组会呈现你预期的连续格式:

0: [0, 130]
1: [130, 290]
2: [290, 445]
3: [445, 600]
...

每个区块的起始位置严格等于前一个区块的结束位置,实现垂直区块的无缝拼接。

内容的提问来源于stack exchange,提问作者Anton E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 17:45:46