2012-02-06 139 views
1

我需要在Kinect中创建一个光标,但我不知道从哪里开始。我需要使用WPF和C#。光标应该是手形,当我将鼠标悬停在元素上时,应该出现“加载”圆圈,并且当它“加载”时,它应该触发悬停元素上的点击事件。我相信你们都熟悉这一点。Kinect自定义光标

如果有人可以给我写信给我一些指导哦,如何实现这一点会有很大的帮助。

回答

3

下面的代码片段,可以帮助你:

using Microsoft.Research.Kinect.Nui; 

Runtime nui = Runtime.Kinects[0]; 
nui.Initialize(RuntimeOptions.UseSkeletalTracking); 
nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady); 

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) 
{ 
    SkeletonFrame sf = e.SkeletonFrame; 
    SkeletonData d = (from s in sf.Skeletons 
         where s.TrackingState == SkeletonTrackingState.Tracked 
         select s).FirstOrDefault(); 

    if (d != null) 
    { 
      SetHandPosition(imageCursor, d.Joints[JointID.HandLeft]); 
    } 
} 

void SetHandPosition(FrameworkElement e, Joint joint) 
{ 
    Joint scaledJoint = Coding4Fun.Kinect.Wpf.SkeletalExtensions.ScaleTo(joint, 600, 400, 0.75f, 0.75f); 

    Canvas.SetLeft(e, scaledJoint.Position.X); 
    Canvas.SetTop(e, scaledJoint.Position.Y); 
} 

如果你希望你的光标移动到不同的盘旋元素上,然后只要到元素的属性,并设置光标为元素。在Visual Studio中,您可以在元素属性中选择一个游标。

要在悬停点击过的元素,你必须执行MouseEnter事件

private void button1_MouseEnter(object sender, MouseEventArgs e) 
{ 
....   
} 

下面是一些相关信息看:

button1.PerformClick() in wpf

+0

我有更大的问题,世界粮食计划署比Kinect的本身,但感谢帮助:) – kr85 2012-02-06 23:10:14

+0

这里是一个视频教程,其中有人正在做的事情光标(未悬停部分):http://research.microsoft.com/应用程序/视频/?ID = 152249 – 2012-02-07 06:55:44

1

下面是使用一个很好的解决方案官方的SDK,但即使你不是,它可以非常有用(它是我的):

你应该看看th e(免费)代码在这里Beginning Kinect Programming with the Microsoft Kinect SDK sample code你点击“源代码/下载”,你将在示例中感兴趣的是第6章(文件夹的名称)。

基本上他们正在使用一个静态类KinectInput,允许提出了新的事件像KinectCursorEnterEvent,有一个光标管理KinectCursorManager这确实几乎所有拿到手的位置/更新光标......和他们使用的装饰器放光标,您想要作为游标的FrameworkElement

他们实现你正在谈论的HoverButton。它会在计时器耗尽后触发点击事件(发生时发生定时器KinectCursorEnterEvent)。他们提出的解决方案非常优雅,并且可以轻松实现很好的控制。 您可以轻松地修改代码来处理两个光标有一个枚举CursorSide

(这是增值的Kinect的的,是不是?):

public enum CursorSide 
{ 
    Left, 
    Right 
} 

只有modifyong的KinectCursorManager有容量2的词典,和枚举是关键,和光标下具有对elemtn的指针为每个手:

private Dictionary<CursorSide, CursorAdorner> _cursorAdorner; 
    private UIElement _lastElementOverRightHand; 
    private UIElement _lastElementOverLeftHand; 

但在此之前必须消除执行的是代码的部分选举主手(基本上是最靠近Kinect的手)。

我希望这可以帮助别人: - ]

这本书很有意思,你可以买几块钱。