Processing 3.2.3+Kinect开发:全局变量未定义及colorWidth字段问题求助
解决Processing Kinect波纹效果的两个常见问题
一、「全局变量x、y不存在」报错处理
Processing没有默认全局的x、y内置变量,直接使用会触发未定义错误。解决分两种场景:
- 若需获取鼠标位置:直接替换为内置变量
mouseX、mouseY; - 若需自定义坐标变量:在代码最顶部(全局作用域)声明变量,示例:
之后在float x, y; // 全局声明x、ysetup()或draw()中给变量赋值,比如:x = width / 2; // 初始化x为画布中心 y = height / 2;
二、kinect.colorWidth、colorHeight无法识别处理
问题源于Kinect库的API命名差异,不同库的宽高获取方式不同:
- 若使用SimpleOpenNI库:
彩色图像宽高需通过函数调用获取,而非直接访问字段,正确写法是kinect.colorImageWidth()和kinect.colorImageHeight(),同时要确保已启用彩色流:kinect.enableColor(); // setup()中启用彩色流 int colorW = kinect.colorImageWidth(); int colorH = kinect.colorImageHeight(); - 若使用其他库(如KinectV2):
确认库的API文档,部分库用kinect.colorWidth、kinect.colorHeight,但需先初始化彩色数据流,且确保库版本兼容Processing 3.2.3。
修正后的完整示例代码(SimpleOpenNI版)
import SimpleOpenNI.*; SimpleOpenNI kinect; float x, y; // 全局声明自定义坐标变量 void setup() { kinect = new SimpleOpenNI(this); kinect.enableColor(); // 启用彩色流 // 获取彩色图像尺寸并设置画布 int colorW = kinect.colorImageWidth(); int colorH = kinect.colorImageHeight(); size(colorW, colorH); // 初始化x、y为画布中心 x = width / 2; y = height / 2; } void draw() { kinect.update(); // 更新Kinect数据 image(kinect.colorImage(), 0, 0); // 绘制彩色图像 // 波纹效果示例(这里用椭圆模拟波纹中心) fill(255, 0, 0, 100); ellipse(x, y, 50, 50); // 跟随鼠标更新坐标 x = mouseX; y = mouseY; }
注意事项
- 确保已正确安装对应Kinect库:通过Processing菜单栏「Sketch」→「Import Library」搜索安装;
- 若使用Kinect硬件,需提前安装对应驱动,确保设备被系统识别。
内容的提问来源于stack exchange,提问作者user21040488
相关产品推荐
相关产品推荐

