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
相关产品推荐
相关产品推荐

