PC用Kinect玩水果忍者核心代码

news/2024/12/2 14:43:20/
/*******************************PC用Kinect玩水果忍者核心代码*******************************/private const double ArmXStretchedThreshold = 0.3;//手臂X轴方向伸展阀值,单位米private const double ArmZStretchedThreshold = 0.2;//手臂Z轴方向伸展阀值,单位米private bool isMouseLeftButtonDown = false;void kinect_SkeletonFrameReady(object sender,SkeletonFrameReadyEventArgs e){if(isWindowsClosing){return;}//获取距离Kinect距离最近的被骨骼跟踪的用户Skeleton s = GetClosetSkeleton(e);if(s == null){return;}if(s.TrackingState == SkeletonTrackingState.Tracked){var joints = s.Joints;Joint rightHand = Joints[JointType.HandRight];Joint leftHand = Joints[JointType.HandLeft];Joint head = Joints[JointType.Head];//根据Kinect距离判定是左手还是右手操作鼠标,兼容左右手var hand = (rightHand.Position.Z < leftHand.Position.Z ? rightHand : leftHand);//如果手没有伸出,则不做跟踪if(head.Position.Z - hand.Position.Z <= ArmZStretchedThreshold){return;}//模拟鼠标移动TrackHand2SimulateMouseMove(hand);bool isLeftHandStretched = ((head.Position.X-leftHand.Position.X)>=ArmXStretchedThreshold && (head.Position.Z-hand.Position.Z)<ArmZStretchedThreshold);bool isRightHandStretched = ((rightHand.Position.X-leftHand.Position.X)>=ArmXStretchedThreshold) && (head.Position.Z-hand.Position.Z)<ArmZStretchedThreshold);//无论左手或右手水平举起,模拟鼠标左键按下事件if(isLeftHandStretched || isRightHandStretched){MouseToolkit.mouse_event(MouseToolkit.MouseEventFlag.LeftDown,0,0,0,0);isMouseLeftButtonDown = true;}else if(isMouseLeftButtonDown){isMouseLeftButtonDown = false;MouseToolkit.mouse_event(MouseToolkit.MouseEventFlag.LeftUp,0,0,0,0);}}}private void TrackHand2SimulateMouseMove(Joint hand){if(hand.TrackingState != JointTrackingState.Tracked){return;}//获得屏幕高度和宽度int screenWidth = (int)SystemParameters.PrimaryScreenWidth;int screenHeight = (int)SystemParameters.PrimaryScreenHeight;//将骨骼坐标映射为屏幕坐标且手在有限范围内移动即可覆盖整个屏幕float posX = hand.ScaleTo(screenWidth,screenHeight,0.2f,0.2f).Position.X;float posY = hand.ScaleTo(screenWidth,screenHeight,0.2f,0.2f).Position.Y;Joint scaledCursorJoint = new Joint{TrackingState = JointTrackingState.Tracked;Position = new SkeletonPoint{X = posX;Y = posY;Z = hand.Position.Z;}};int x = Convert.ToInt32(scaledCursorJoint.Position.X);int y = Convert.ToInt32(scaledCursorJoint.Position.Y);int mouseX = Convert.ToInt32(x*65536/screenWidth);int mouseY = Convert.ToInt32(x*65536/screenHeight);MouseToolkit.mouse_event(MouseToolkit.MouseEventFlag.Absolute|MouseToolkit.MouseEventFlag.Move,mouseX,mouseY,0,0);}


http://www.ppmy.cn/news/911303.html

相关文章

【练手项目】用Python写了一个水果忍者小游戏

水果忍者的玩法很简单&#xff0c;尽可能的切开抛出的水果就行。 今天就用python简单的模拟一下这个游戏。在这个简单的项目中&#xff0c;我们用鼠标选择水果来切割&#xff0c;同时炸弹也会隐藏在水果中&#xff0c;如果切开了三次炸弹&#xff0c;玩家就会失败。 一、需要导…

L3-012 水果忍者 (30 分)

L3-012 水果忍者 (30 分) 2010年风靡全球的“水果忍者”游戏&#xff0c;想必大家肯定都玩过吧&#xff1f;&#xff08;没玩过也没关系啦~&#xff09;在游戏当中&#xff0c;画面里会随机地弹射出一系列的水果与炸弹&#xff0c;玩家尽可能砍掉所有的水果而避免砍中炸弹&…

PTA 一 水果忍者

2010年风靡全球的“水果忍者”游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以完成游戏规定的任务。如果玩家可以一刀砍下画面当中一连串的水果,则会有额外的奖励,如…

用【Python】写了一个水果忍者小游戏,玩过之后爱不释手

前言 水果忍者到家都玩过吧&#xff0c;但是Python写的水果忍者你肯定没有玩过。今天就给你表演一个新的&#xff0c;用Python写一个水果忍者。 水果忍者的玩法很简单&#xff0c;尽可能的切开抛出的水果就行。 今天就用python简单的模拟一下这个游戏。在这个简单的项目中&a…

【游戏开发实战】Unity实现水果忍者切水果的刀痕效果教程(两种实现方式:TrailRenderer、LineRenderer)

文章目录 一、前言二、资源准备三、制作材质球四、背景图五、刀痕的实现&#xff0c;方式一&#xff1a;TrailRenderer1、创建物体挂TrailRenderer组件2、编写TrailRendererBehaviour脚本3、运行测试 六、刀痕的实现&#xff0c;方式二&#xff1a;LineRenderer1、创建物体挂Li…

android 水果忍者源码,Fruit Ninja(水果忍者)游戏源代码下载、分析(下)---可运行Android,Ios,Window,Mac,Html5平台...

背景&#xff1a; 这一篇是结尾篇&#xff0c;主要分析检测&#xff0c;游戏结束和保存最高分&#xff1b; ps&#xff1a; 1 CocosEditor已发布新版本&#xff0c;现在提供6个实战demo学习&#xff0c;包括flappy &#xff0c;popstar &#xff0c;fruitninja&#xff0c;moon…

水果忍者(数学 叉积)

水果忍者 题目 2010年风靡全球的“水果忍者”游戏&#xff0c;想必大家肯定都玩过吧&#xff1f;&#xff08;没玩过也没关系啦~&#xff09;在游戏当中&#xff0c;画面里会随机地弹射出一系列的水果与炸弹&#xff0c;玩家尽可能砍掉所有的水果而避免砍中炸弹&#xff0c;就…

付费水果忍者破解

前言 闲着无聊手机上下载了一款手机游戏玩玩&#xff0c;正在玩的时候突然弹出了付费对话框&#xff0c;刚开始我还纳闷怎么没广告&#xff0c;这么良心&#xff0c;原来是在这里等着呢&#xff0c;如下图&#xff1a; 作为一个逆向初学者突然有一股冲动&#xff0c;能不能…