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

p5.js草图中图像按需显示隐藏及noseX位置指示器无轨迹跟随问题

解决你的p5.js PoseNet两个小需求

嘿,我来帮你搞定这两个问题!咱们分两步来处理:


1. 去掉noseX指示器的轨迹,只显示当前点

问题根源是draw()函数默认会叠加每一次的绘制内容,之前画的椭圆就变成了轨迹。只要在draw函数最开头加入清屏逻辑,就能解决:

function draw() {
  // 每次循环先清除画布,旧的绘制痕迹就会被清空
  background(255); // 用白色清屏,你也可以换成其他适配的颜色
  
  // 后续的pose检测、椭圆绘制代码放在这里
}

这样每次draw循环都会先把画布擦干净,再绘制当前的鼻子位置,就只会显示一个跟着移动的点啦。


2. 当noseX离开区域时自动隐藏图像

我们需要一个状态变量来控制图像的显示/隐藏,再根据noseX的位置动态切换这个状态:

首先,在代码最顶部(setup函数外面)定义状态变量和图像变量:

let showImage = false; // 初始状态设为不显示图像
let targetImage; // 用来存储你要显示的图像,记得在preload里加载它

然后在PoseNet的检测回调函数里,更新显示状态:

function gotPoses(poses) {
  if (poses.length > 0) {
    let noseX = poses[0].pose.nose.x;
    
    // 根据noseX的位置切换显示状态
    showImage = noseX > 50; // 一行代码搞定,比if-else更简洁
    
    // 绘制鼻子指示器
    fill(0);
    ellipse(noseX, poses[0].pose.nose.y, 20, 20);
  }
}

最后在draw函数里,根据状态决定是否绘制图像:

function draw() {
  background(255);
  
  // 先绘制视频或基础画布内容(如果有的话)
  image(video, 0, 0, width, height);
  
  // 只有状态为true时才绘制图像
  if (showImage) {
    image(targetImage, 0, 0); // 这里可以调整图像的位置和尺寸参数
  }
}

把这些修改整合到你的代码里,就能实现:鼻子移动到指定区域时显示图像,离开区域自动隐藏,同时鼻子的指示器只会显示当前位置,不会留下移动轨迹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:52:33