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

使用p5.js在Sublime开发时,循环无限批量生成圆点问题求助

解决p5.js中无限生成圆点的问题

我一看你这段代码就明白问题出在哪啦——p5.js里的draw()函数是会持续循环执行的,哪怕你设了frameRate(1),它也会每秒跑一次,每次跑都会执行一遍for循环生成指定数量的圆点,自然就会无限新增圆点了。

要实现「设置随机背景色+生成指定数量圆点」的需求,我给你两种常见的修改方案,你可以根据实际需求选择:

方案一:页面加载后只生成一次圆点

把生成圆点的逻辑移到setup()函数里就行,因为setup()只会在页面初始化时执行一次,不会重复跑:

function setup() { 
  // 生成随机RGB背景色值
  let r = random(0,255); 
  let g = random(0,255); 
  let b = random(0,255); 
  createCanvas(window.innerWidth,window.innerHeight); 
  background(r,g,b); 

  // 在这里生成3个圆点,仅执行一次
  for (let i = 0; i < 3; i++) { 
    fill(0); 
    noStroke(); 
    // 补充完整的随机位置椭圆绘制代码
    ellipse(random(width), random(height), 20, 20);
  }
} 

// 不需要持续执行的话,draw函数可以留空或者删掉
function draw() { 
}

方案二:每秒刷新背景色并生成新圆点(替换旧内容)

如果你的需求是每秒更换一次背景色,同时生成新的圆点(覆盖之前的内容,不是叠加),那就在draw()里先重新绘制背景,再生成圆点:

function setup() { 
  createCanvas(window.innerWidth,window.innerHeight); 
  frameRate(1); // 控制每秒执行一次draw逻辑
} 

function draw() { 
  // 每次执行draw都重新生成随机背景色,覆盖之前的画面
  let r = random(0,255); 
  let g = random(0,255); 
  let b = random(0,255); 
  background(r,g,b); 

  // 生成3个新的随机位置圆点
  for (let i = 0; i < 3; i++) { 
    fill(0); 
    noStroke(); 
    ellipse(random(width), random(height), 20, 20);
  }
}

另外小提醒:尽量用let代替var声明变量,能避免变量提升带来的意外问题哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:23:15