上一篇博文介绍了一下Kinect的简单姿势识别,详细内容请转到http://yacare.iteye.com/blog/1950112,鄙人之前还写过一个俄罗斯方块的程序,具体请看http://yacare.iteye.com/blog/1949398,本博文主要将这两者结合起来,用Kinect姿势来控制游戏。仅作为一个抛砖引玉的案例,不知道公安局是否备案(哈哈,开个玩笑)。来说明去我们利用Kinect开发使用的只是其9牛1毛,杯水车薪的功能。
至于纯代码键盘控制的俄罗斯方块游戏请阅读C#实现俄罗斯方块,在此就不展开说明。此博文是基于二维仿真版的俄罗斯方块制作。界面与之前的可能有点不一样,但用Kinect姿势控制游戏的部分是基本相同的。
首先,我们要自定义一个姿势库,来存放自定义的姿势。
定义该姿势为方块旋转,左右肩膀,手腕,手掌都为水平方向,阈值角度为8度
定义该姿势为方块左移,左边肩膀,手腕,手掌都为竖直向上方向,阈值角度为10度 ;右边肩膀,手腕,手掌都为竖直向下方向, 阈值角度为30度。
定义该姿势为方块右移,右边肩膀,手腕,手掌都为竖直向上方向,阈值角度为10度 , 左边肩膀,手腕,手掌都为竖直向下方向, 阈值角度为30度。
定义该姿势为方块加速下落,左右边肩手腕,手掌都为水平方向,阈值角度为8度 , 左右肩膀,手腕与竖直竖直向下方向成25度(多次测试,手自然交叉接近这个角度), 阈值角度为8度。
/// <summary> /// 自定义姿势库 /// </summary> private void PopulatePoseLibrary() { this.poseLibrary = new Pose[4]; //Pose 1 - 伸开双臂 Arms Extended this.poseLibrary[0] = new Pose(); this.poseLibrary[0].Title = "伸开双臂(Arms Extended)"; this.poseLibrary[0].Angles = new PoseAngle[4]; this.poseLibrary[0].Angles[0] = new PoseAngle(JointType.ShoulderLeft, JointType.ElbowLeft, 180, 8); this.poseLibrary[0].Angles[1] = new PoseAngle(JointType.ElbowLeft, JointType.WristLeft, 180, 8); this.poseLibrary[0].Angles[2] = new PoseAngle(JointType.ShoulderRight, JointType.ElbowRight, 0, 8); this.poseLibrary[0].Angles[3] = new PoseAngle(JointType.ElbowRight, JointType.WristRight, 0, 8); //Pose 2 - 把双手交叉 Both Hands Cross this.poseLibrary[1] = new Pose(); this.poseLibrary[1].Title = "把手交叉(Hands Cross)"; this.poseLibrary[1].Angles = new PoseAngle[4]; this.poseLibrary[1].Angles[0] = new PoseAngle(JointType.ShoulderLeft, JointType.ElbowLeft, 245, 8); this.poseLibrary[1].Angles[1] = new PoseAngle(JointType.ElbowLeft, JointType.WristLeft, 0, 8); this.poseLibrary[1].Angles[2] = new PoseAngle(JointType.ShoulderRight, JointType.ElbowRight, 285, 8); this.poseLibrary[1].Angles[3] = new PoseAngle(JointType.ElbowRight, JointType.WristRight, 180, 8); //Pose 3 - 举起左手 Left Up and Right Down this.poseLibrary[2] = new Pose(); this.poseLibrary[2].Title = "(举起左手)Left Up and Right Down"; this.poseLibrary[2].Angles = new PoseAngle[4]; this.poseLibrary[2].Angles[0] = new PoseAngle(JointType.ShoulderLeft, JointType.ElbowLeft, 95, 10); this.poseLibrary[2].Angles[1] = new PoseAngle(JointType.ElbowLeft, JointType.WristLeft, 95, 10); this.poseLibrary[2].Angles[2] = new PoseAngle(JointType.ShoulderRight, JointType.ElbowRight, 270, 30); this.poseLibrary[2].Angles[3] = new PoseAngle(JointType.ElbowRight, JointType.WristRight, 270, 30); //Pose 4 - 举起右手 Right Up and Left Down this.poseLibrary[3] = new Pose(); this.poseLibrary[3].Title = "(举起右手)Right Up and Left Down"; this.poseLibrary[3].Angles = new PoseAngle[4]; this.poseLibrary[3].Angles[0] = new PoseAngle(JointType.ShoulderLeft, JointType.ElbowLeft, 270, 30); this.poseLibrary[3].Angles[1] = new PoseAngle(JointType.ElbowLeft, JointType.WristLeft, 270, 30); this.poseLibrary[3].Angles[2] = new PoseAngle(JointType.ShoulderRight, JointType.ElbowRight, 85, 10); this.poseLibrary[3].Angles[3] = new PoseAngle(JointType.ElbowRight, JointType.WristRight, 85, 10); }
处理姿势的事件,控制方块的运动
/// <summary> /// 处理玩家姿势的方法 /// </summary> /// <param name="skeleton"></param> private void ProcessPosePerforming(Skeleton skeleton) { bool ret; Graphics grMain = screenPanel.CreateGraphics(); int value = 0; if (IsPose(skeleton, this.poseLibrary[0]))// up { Console.WriteLine("双手上举垂直姿势符合条件"); value = UP; } else if (IsPose(skeleton, this.poseLibrary[1])) { Console.WriteLine("双手交叉姿势符合条件");// fall down value = DOWN; } else if (IsPose(skeleton, this.poseLibrary[2])) { Console.WriteLine("伸直左手姿势符合条件");// left value = LEFT; } else if (IsPose(skeleton, this.poseLibrary[3])) { Console.WriteLine("伸直右手姿势符合条件"); // right value = RIGHT; } switch (value) { case UP: // up ret = mainBody.MoveShape(grMain, Body.MOVE_TYPE.MOVE_ROATE); break; case LEFT: // left ret = mainBody.MoveShape(grMain, Body.MOVE_TYPE.MOVE_LEFT); break; case RIGHT: // right ret = mainBody.MoveShape(grMain, Body.MOVE_TYPE.MOVE_RIGHT); break; case DOWN: // fall down ret = mainBody.MoveShape(grMain, Body.MOVE_TYPE.MOVE_FALL); break; default: ret = false; break; } if (ret && value == DOWN) { DisposeShapeDown(); } }
相关推荐
本资源与Blog《Kinect开发之体感举起手来程序设计(Kinect俄罗斯方块)》配套。 如果您下载到了本资源。请去blog上看原文,方便一起学习交流。 游戏需要Kinect SDK的支持,请先安装Kinect SDK 本资源对应博文地址为...
体感技术kinect 2.0开发体感游戏资料,人机互动例子,手势识别,骨骼绑定,手势翻书,语音识别,包含Unity例子:https://download.csdn.net/download/qq_28542129/87380149 包含资源如下: kinect for windows SDK ...
体感技术kinect 2.0开发体感游戏PDF以及word各种资料:https://download.csdn.net/download/qq_28542129/87380157 kinect官方安装包:KinectSDK-v2.0_1409-Setup.exe unity资源包:kinect2.8.unitypackage unity资源...
总之,"Unity结合Kinect2体感开发:KinectForWindows_UnityPro"项目提供了一个学习和实践体感技术的平台,通过Unity3D与Kinect 2的结合,可以创造出富有创意和互动性的应用程序。无论是游戏开发者还是希望探索新交互...
在“Kinect1Demo08 体感俄罗斯方块”中,Kinect负责收集玩家的肢体运动数据,如手臂的移动和旋转,然后将这些数据实时解析并映射到游戏中,使得玩家可以通过自然的手势来控制俄罗斯方块的移动、旋转和下落。...
在实际开发中,开发者可以结合这些文档,逐步熟悉Kinect 2.0的开发流程,掌握体感游戏和应用程序的设计与实现。同时,通过不断实践和调试,将理论知识转化为实际应用,创造出更具创新性和趣味性的体感体验。 标签中...
【项目介绍】:基于Unity和kinect的3D双人体感跑酷游戏。 Assets文件夹中是特别版; 每个文件夹中都包含图片、音频、模型、脚本等资源文件。 游戏玩法: 体感跑酷游戏,主要是玩家通过手臂左划右划,或鼠标上下...
由此可以看出,基于Kinect的体感交互机器人在技术上已经展现出巨大的潜力,且正在成为机器人技术未来发展的重要趋势之一。由于人类在动作规划和感知理解方面有天然的优势,而机器人则在底层感知、路径规划、重复动作...
Kinect体感器,作为微软推出的革命性游戏交互设备,其背后蕴含的科技原理与创新设计,彻底改变了人们对游戏操控的传统认知。本文旨在深入解析Kinect的工作原理,探索其如何利用光学、电磁学等知识,实现无手柄、全...
总的来说,"体感游戏之微信打飞机(Kinect V2)"项目展示了结合Cocos2d-x游戏引擎与Kinect V2硬件的创新应用,为玩家提供了全新的互动体验。这个项目不仅需要扎实的编程技能,还要求对游戏设计、人体动作识别和实时...
**Kinect 体感连线小游戏**是一款利用微软的Kinect传感器技术实现的人机交互游戏,旨在帮助用户通过手势识别进行游戏互动,为学习和理解Kinect体感技术提供了一个基础的入门实例。这款游戏展示了如何将Kinect传感器...
Kinect作为Xbox360的一款革命性体感设备,其独特的设计理念和技术应用吸引了全球电子爱好者的关注。美国电子产品拆解网站iFixit对Kinect进行了一次全面深入的拆解分析,揭示了这款产品的内部构造与技术细节。 #### ...
Kinect体感器驱动程序源代码是针对微软的Kinect设备进行开发的一种开源驱动项目,主要由freenect库提供。这个驱动程序允许开发者通过编程接口与Kinect设备交互,获取其捕获的各种数据,包括视频流、深度图以及骨骼...
Kinect 开发是一个涉及多领域技术的综合实践,包括计算机视觉、传感器技术、嵌入式系统、图形处理和编程语言等多个方面。本文将介绍一些针对初学者的 Kinect 开发资源,帮助你快速进入这个充满潜力的领域。 首先,...
标题“kinect2.0控制鼠标”涉及到的技术是利用微软的第二代Kinect传感器来实现对计算机鼠标的操控。Kinect 2.0是一款先进的体感设备,它能够捕捉到用户的三维空间信息,包括深度图像和人体骨骼追踪数据。在这个项目...
在开发过程中,理解这些基本概念有助于开发者更好地利用Kinect进行实时体感交互设计。 "kinect音频开发文档"深入讲解了如何通过Kinect进行音频捕捉和处理。Kinect不仅能够捕捉视觉信息,还能捕获环境声音,提供3D...
标题中的“Kinect V2 for Windows 体感控制PPT by LSS”表明这是一个关于使用Kinect V2传感器在Windows平台上进行二次开发,实现通过人体手势来控制PPT播放的项目。这个项目可能是由一位名叫LSS的开发者或团队创建的...
标题“XBOX360 kinect...总的来说,将Xbox 360的Kinect体感技术应用于PC是一项综合了硬件、软件、图像处理和用户交互设计的复杂任务。开发者需要具备多方面的技能,才能充分利用这一技术创造出新颖而有趣的体感应用。
Kinect V2 for Unity3D是一款专为Unity3D游戏引擎设计的插件,它使得开发者能够利用微软的第二代Kinect传感器在Unity环境中进行体感交互开发。这款插件的出现极大地拓宽了Unity3D在虚拟现实、增强现实以及互动体验等...