如何实现5-10秒随机自动开关的门?现有代码仅能单次关闭
搞定门循环随机切换状态的问题
你的代码现在只能完成一次“从开到关”的切换,之后就一直保持关闭了——因为切换时间只在程序启动时生成了一次,而且完全没考虑关闭后再打开的逻辑。要实现每5-10秒随机切换一次门的开关状态,我们得加几个关键逻辑:跟踪当前状态、每次切换时重新计算下一次的时间。
修改后的完整代码
// 记录当前门是开还是关:true=打开,false=关闭 boolean isDoorOpen = true; // 存储下一次要切换状态的时间点(毫秒) long nextSwitchTime; void setup() { size(1000, 1000); // 初始化第一次切换的时间 setNextSwitchTime(); } void draw() { // 检查是否到达切换时间 if (millis() >= nextSwitchTime) { // 切换状态:开变关,关变开 isDoorOpen = !isDoorOpen; // 重新计算下一次切换的时间 setNextSwitchTime(); } background(255); // 每次绘制前清屏,避免门的图形重叠 // 根据当前状态绘制门 if (isDoorOpen) { doorOpen(); } else { doorClosed(); } } void doorOpen() { noFill(); stroke(0); // 添加黑描边,确保无填充的门在白色背景上可见 rect(500, 500, 100, 200); } void doorClosed() { fill(0); rect(500, 500, 100, 200); } // 生成5-10秒后的随机切换时间 void setNextSwitchTime() { // 生成5000到10000毫秒的随机延迟 long randomDelay = random(5000, 10000); nextSwitchTime = millis() + randomDelay; }
核心改动说明
- 状态跟踪:用
isDoorOpen布尔变量记录当前门的状态,每次切换时取反(!isDoorOpen)就能实现开/关的循环切换。 - 动态更新切换时间:新增
setNextSwitchTime()方法,每次切换状态时都重新生成5-10秒的随机延迟,并计算出下一次切换的时间点(当前时间+随机延迟)。 - 清屏优化:在
draw()开头添加background(255),避免多次绘制的门图形重叠,保证视觉效果清晰。 - 可见性修复:给
doorOpen()添加stroke(0),解决无填充矩形在白色背景上可能看不见的问题。
这样修改后,门就会在开、关状态之间循环切换,每次停留的时间都是5-10秒内的随机值啦。
内容的提问来源于stack exchange,提问作者aadds
相关产品推荐
相关产品推荐

