Processing定时循环绘制:实现背景每5秒变绿2秒的问题求助
问题分析与解决方案
原代码存在几个关键问题:
time变量初始化时机错误,全局作用域中调用millis()时程序未启动,值为0circle()函数缺少半径参数,会触发编译错误- 逻辑未实现「每5秒变绿、持续2秒后恢复」的循环效果,仅会单次触发背景变色
以下是修正后的代码:
color GREEN = #1fa81f; color DEFAULT_BG = #000000; long lastSwitchTime; boolean isGreenBackground = false; void setup(){ size(650, 800); background(DEFAULT_BG); lastSwitchTime = millis(); // 初始化切换时间为程序启动时刻 } void draw(){ // 修复circle函数,添加半径参数(示例设为50,可自行调整) circle(mouseX, mouseY, 50); long currentTime = millis(); long timeElapsed = currentTime - lastSwitchTime; // 根据当前背景状态判断是否切换 if (isGreenBackground) { // 绿色背景持续2秒后切回默认 if (timeElapsed >= 2000) { background(DEFAULT_BG); isGreenBackground = false; lastSwitchTime = currentTime; } } else { // 默认背景持续5秒后切换为绿色 if (timeElapsed >= 5000) { background(GREEN); isGreenBackground = true; lastSwitchTime = currentTime; } } }
逻辑说明
- 用
isGreenBackground跟踪当前背景状态,lastSwitchTime记录上次切换的时间点 - 在
draw()循环中计算时间差:- 默认背景下累计5秒触发变色
- 绿色背景下累计2秒触发恢复默认背景
- 补全
circle()函数的参数错误,确保程序正常编译运行
内容的提问来源于stack exchange,提问作者Ana F
相关产品推荐
相关产品推荐

