`
什么世道
  • 浏览: 222819 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Kinect开发之体感举起手来程序设计(Kinect俄罗斯方块)

阅读更多

    上一篇博文介绍了一下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();
            }
        }
 

 

运行示例:
 


 
 
由于Kinect检测精度和鄙人算法能力有限,游戏姿势的检测并不是特别完美,欢迎大家体验测试并提宝贵意见,如果不满意,也欢迎大家拍砖。#^V^#
 友情提示:该项目需要有Kinect SDK的支持才能运行。

Kinect SDK下载地址:http://www.microsoft.com/en-us/kinectforwindowsdev/default.aspx

 

程序所有源代码和项目已打包上传到:
下一篇博文将分享Kinect结合Unity3D进行开发
希望大家多多支持和指正。
 

Kinect开发系列博文:

Kinect开发之结合Unity3D进行游戏应用开发
 
Kinect开发之体感举起手来程序设计(Kinect俄罗斯方块)
 
Kinect开发之简单姿势识别
 
Kinect开发之获取骨骼关节数据并绘制成火柴人
 
Kinect开发之获取彩色摄像头数据 
  • 大小: 5.3 KB
  • 大小: 3.2 KB
  • 大小: 3.2 KB
  • 大小: 3.4 KB
  • 大小: 13.4 KB
  • 大小: 22.2 KB
分享到:
评论

相关推荐

    Kinect俄罗斯方块源代码及项目

    本资源与Blog《Kinect开发之体感举起手来程序设计(Kinect俄罗斯方块)》配套。 如果您下载到了本资源。请去blog上看原文,方便一起学习交流。 游戏需要Kinect SDK的支持,请先安装Kinect SDK 本资源对应博文地址为...

    体感技术kinect 2.0开发体感游戏PDF以及word各种资料

    体感技术kinect 2.0开发体感游戏资料,人机互动例子,手势识别,骨骼绑定,手势翻书,语音识别,包含Unity例子:https://download.csdn.net/download/qq_28542129/87380149 包含资源如下: kinect for windows SDK ...

    体感技术kinect 2.0开发体感游戏资料,人机互动例子,手势识别,骨骼绑定,手势翻书,语音识别,包含Unity例子

    体感技术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

    总之,"Unity结合Kinect2体感开发:KinectForWindows_UnityPro"项目提供了一个学习和实践体感技术的平台,通过Unity3D与Kinect 2的结合,可以创造出富有创意和互动性的应用程序。无论是游戏开发者还是希望探索新交互...

    Kinect1Demo08 俄罗斯方块

    在“Kinect1Demo08 体感俄罗斯方块”中,Kinect负责收集玩家的肢体运动数据,如手臂的移动和旋转,然后将这些数据实时解析并映射到游戏中,使得玩家可以通过自然的手势来控制俄罗斯方块的移动、旋转和下落。...

    Kinect2.0体感开发文档.rar

    在实际开发中,开发者可以结合这些文档,逐步熟悉Kinect 2.0的开发流程,掌握体感游戏和应用程序的设计与实现。同时,通过不断实践和调试,将理论知识转化为实际应用,创造出更具创新性和趣味性的体感体验。 标签中...

    unity kinect 双人跑酷体感游戏

    【项目介绍】:基于Unity和kinect的3D双人体感跑酷游戏。 Assets文件夹中是特别版; 每个文件夹中都包含图片、音频、模型、脚本等资源文件。 游戏玩法: 体感跑酷游戏,主要是玩家通过手臂左划右划,或鼠标上下...

    基于Kinect的体感交互机器人.pdf

    由此可以看出,基于Kinect的体感交互机器人在技术上已经展现出巨大的潜力,且正在成为机器人技术未来发展的重要趋势之一。由于人类在动作规划和感知理解方面有天然的优势,而机器人则在底层感知、路径规划、重复动作...

    Kinect体感器原理

    Kinect体感器,作为微软推出的革命性游戏交互设备,其背后蕴含的科技原理与创新设计,彻底改变了人们对游戏操控的传统认知。本文旨在深入解析Kinect的工作原理,探索其如何利用光学、电磁学等知识,实现无手柄、全...

    体感游戏之微信打飞机(Kinect V2)

    总的来说,"体感游戏之微信打飞机(Kinect V2)"项目展示了结合Cocos2d-x游戏引擎与Kinect V2硬件的创新应用,为玩家提供了全新的互动体验。这个项目不仅需要扎实的编程技能,还要求对游戏设计、人体动作识别和实时...

    Kinect 体感连线小游戏

    **Kinect 体感连线小游戏**是一款利用微软的Kinect传感器技术实现的人机交互游戏,旨在帮助用户通过手势识别进行游戏互动,为学习和理解Kinect体感技术提供了一个基础的入门实例。这款游戏展示了如何将Kinect传感器...

    Xbox360体感设备kinect拆解报告

    Kinect作为Xbox360的一款革命性体感设备,其独特的设计理念和技术应用吸引了全球电子爱好者的关注。美国电子产品拆解网站iFixit对Kinect进行了一次全面深入的拆解分析,揭示了这款产品的内部构造与技术细节。 #### ...

    kinect体感器驱动程序源代码

    Kinect体感器驱动程序源代码是针对微软的Kinect设备进行开发的一种开源驱动项目,主要由freenect库提供。这个驱动程序允许开发者通过编程接口与Kinect设备交互,获取其捕获的各种数据,包括视频流、深度图以及骨骼...

    【原创】Kinect开发入门资源合集

    Kinect 开发是一个涉及多领域技术的综合实践,包括计算机视觉、传感器技术、嵌入式系统、图形处理和编程语言等多个方面。本文将介绍一些针对初学者的 Kinect 开发资源,帮助你快速进入这个充满潜力的领域。 首先,...

    kinect2.0控制鼠标

    标题“kinect2.0控制鼠标”涉及到的技术是利用微软的第二代Kinect传感器来实现对计算机鼠标的操控。Kinect 2.0是一款先进的体感设备,它能够捕捉到用户的三维空间信息,包括深度图像和人体骨骼追踪数据。在这个项目...

    kinect开发核心技术资料

    在开发过程中,理解这些基本概念有助于开发者更好地利用Kinect进行实时体感交互设计。 "kinect音频开发文档"深入讲解了如何通过Kinect进行音频捕捉和处理。Kinect不仅能够捕捉视觉信息,还能捕获环境声音,提供3D...

    Kinect V2 for windows 体感控制PPT by LSS

    标题中的“Kinect V2 for Windows 体感控制PPT by LSS”表明这是一个关于使用Kinect V2传感器在Windows平台上进行二次开发,实现通过人体手势来控制PPT播放的项目。这个项目可能是由一位名叫LSS的开发者或团队创建的...

    XBOX360 kinect体感FOR PC

    标题“XBOX360 kinect...总的来说,将Xbox 360的Kinect体感技术应用于PC是一项综合了硬件、软件、图像处理和用户交互设计的复杂任务。开发者需要具备多方面的技能,才能充分利用这一技术创造出新颖而有趣的体感应用。

    kinect V2 for Unity3d

    Kinect V2 for Unity3D是一款专为Unity3D游戏引擎设计的插件,它使得开发者能够利用微软的第二代Kinect传感器在Unity环境中进行体感交互开发。这款插件的出现极大地拓宽了Unity3D在虚拟现实、增强现实以及互动体验等...

Global site tag (gtag.js) - Google Analytics