为何Processing代码无法逐个生成方块,而是一次性填满画布?
问题原因
- Processing的
draw()函数默认每帧执行一次,你将全部方块的绘制逻辑放在了draw()内部的嵌套循环中,第一次执行draw()时,循环就会一次性跑完10行共100个方块的绘制,因此看不到逐个生成的过程。 - 你设置的
frameRate(1)仅控制draw()每秒执行1次,但无法限制单帧内的循环执行逻辑,因此帧率设置没有起到控制生成间隔的作用。
修改后可实现需求的代码
void setup() { size(600,600); background(0); fill(255); // 设置方块填充色,避免和黑色背景重合 frameRate(1); // 此处数值控制每秒生成的方块数量,调大可加快生成速度 } int xCoord = 0; int y = 0; int total = 100; // 总共有10行*10列共100个方块 int drawn = 0; void draw() { // 全部方块绘制完成后停止运行 if (drawn >= total) { noLoop(); return; } // 每帧仅绘制1个方块 rect(xCoord, y, 60, 60); drawn++; // 更新横坐标 xCoord += 60; // 单行填满后切换到下一行 if (xCoord >= width) { xCoord = 0; y += 60; } }
核心修改说明
- 移除
draw()内的嵌套循环,利用draw()本身的帧刷新机制控制生成间隔,每帧仅执行一次单个方块的绘制逻辑 - 新增已绘制方块计数,绘制完成后调用
noLoop()停止draw()执行,减少不必要的资源消耗 - 每次绘制完成后判断当前行是否填满,自动切换到下一行,实现逐行排列的效果
内容的提问来源于stack exchange,提问作者buDujS
相关产品推荐
相关产品推荐

