Processing动画开发疑问:程序片段单次执行与单个形状描边设置
问题解答
1. 让程序中某段代码仅执行一次
用布尔变量做开关控制执行状态即可,步骤如下:
- 声明一个布尔变量,初始值设为
false(标记代码未执行) - 在触发事件(比如
mousePressed())里,判断变量是否为false,若是则执行目标代码,同时把变量设为true,后续触发就不会再执行这段代码
示例代码(Processing环境):
// 标记背景是否已切换的开关 boolean backgroundSwitched = false; void setup() { size(400, 400); background(255); // 初始白色背景 } void draw() { // 这里放你的动画循环代码 } void mousePressed() { if (!backgroundSwitched) { background(100); // 切换为灰色背景 backgroundSwitched = true; // 标记已执行,后续不再触发 } }
2. 为单个特定形状添加边框
Processing的绘制状态会持续保留,必须在绘制每个形状前明确设置stroke()或noStroke()才能精准控制。正确做法:
- 绘制目标形状前,调用
stroke()设置边框颜色 - 绘制完目标形状后,立即调用
noStroke()关闭边框,再绘制其他不需要边框的形状
示例代码(Processing环境):
void setup() { size(400, 400); } void draw() { background(255); // 第一个圆形:显示黑色边框 stroke(0); // 设置边框颜色为黑色 fill(255); // 设置填充色为白色 ellipse(100, 200, 80, 80); // 关闭边框,绘制剩下的两个圆形 noStroke(); // 取消边框设置 fill(200); // 设置填充色为浅灰色 ellipse(200, 200, 80, 80); ellipse(300, 200, 80, 80); }
如果之前代码没生效,大概率是没在draw()循环内重置绘制状态——draw()每帧都会执行,上一帧的stroke状态会延续到下一帧,必须每次绘制时明确指定状态。
内容的提问来源于stack exchange,提问作者Ohio's Strongest
相关产品推荐
相关产品推荐

