2012-02-06 137 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的手)。

我希望這可以幫助別人: - ]

這本書很有意思,你可以買幾塊錢。