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

Processing:如何实现物体在特定时间帧内显示与隐藏?

在Processing中实现物体定时显示/隐藏的效果

看起来你想让门在随机的时间间隔里交替出现和消失,但当前代码有点小问题——你的display()函数每次都会绘制门,导致门其实一直处于显示状态,达不到“消失”的效果。我来帮你调整一下代码,实现真正的定时显隐:

首先,我们明确核心逻辑:

  • 让门在一段随机帧内隐藏,然后在另一段随机帧内显示,循环往复
  • 用doorCounter来倒计时当前状态(隐藏或显示)的剩余帧数

修改后的完整代码

int doorCounter;
// 用布尔变量跟踪门的当前状态:true=显示,false=隐藏
boolean doorVisible;

void setup() {
  size(512, 348);
  // 初始化:先让门隐藏一段时间
  resetDoorTimer(false);
}

void draw() {
  // 绘制背景避免帧残留(你可以换成自己的场景元素)
  background(135, 206, 235); 
  
  doorCounter--;
  // 倒计时结束时切换状态并重置计时器
  if (doorCounter <= 0) {
    doorVisible = !doorVisible;
    resetDoorTimer(doorVisible);
  }
  
  // 根据状态决定是否绘制门
  if (doorVisible) {
    drawDoor();
  }
}

// 重置计时器:根据显隐状态设置不同的随机帧范围
void resetDoorTimer(boolean isVisible) {
  if (isVisible) {
    // 门显示的时长:60-120帧(约1-2秒,按60帧/秒计算)
    doorCounter = (int)random(60, 120);
  } else {
    // 门隐藏的时长:180-480帧(约3-8秒)
    doorCounter = (int)random(180, 480);
  }
}

// 单独抽出门的绘制逻辑,代码更清晰易维护
void drawDoor() {
  fill(255);
  rect(420, 190, 55, 100); // 门的轮廓
  rect(435, 210, 25, 25, 7); // 门的窗户
  ellipse(435, 255, 8, 8); // 门把手
}

关键改动说明

  • 新增doorVisible变量跟踪状态,逻辑更直观
  • 把绘制门的代码抽成独立函数,后续修改门的样式更方便
  • 用resetDoorTimer()分别控制显示/隐藏的随机时长,你可以根据需求调整帧范围(1秒≈60帧)
  • 加入background()避免前一帧画面残留,解决门“残影”问题

如果你偏好更简洁的写法,也可以不用布尔变量,直接通过计数器阶段判断:

int doorCounter;
// 枚举状态区分隐藏/显示阶段
enum DoorState { HIDDEN, VISIBLE }
DoorState currentState;

void setup() {
  size(512, 348);
  currentState = DoorState.HIDDEN;
  doorCounter = (int)random(180, 480);
}

void draw() {
  background(135, 206, 235);
  
  doorCounter--;
  if (doorCounter <= 0) {
    // 切换状态并重置对应时长
    currentState = (currentState == DoorState.HIDDEN) ? DoorState.VISIBLE : DoorState.HIDDEN;
    doorCounter = currentState == DoorState.VISIBLE ? (int)random(60,120) : (int)random(180,480);
  }
  
  // 显示状态下绘制门
  if (currentState == DoorState.VISIBLE) {
    fill(255);
    rect(420, 190, 55, 100);
    rect(435, 210, 25, 25, 7);
    ellipse(435, 255, 8, 8);
  }
}

两种写法都能实现你要的定时显隐效果,选哪种全看你觉得哪个更易读~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:36:44