Kinect 2 悬停单击

本文关键字:单击 悬停 Kinect | 更新日期: 2023-09-27 18:36:15

我正在开发WPF(Kinect 2)的Kinect应用程序。我正在使用 KinectRegion 来触发某些按钮,但我想在悬停而不是单击时触发按钮。实现这一目标的最佳方法是什么?我尝试过使用MouseEnter和MouseLeave,但没有运气。我的目标是当用户将鼠标悬停在按钮上时,播放动画,然后在 2 秒后单击按钮。我将不胜感激任何帮助!

<k:KinectRegion x:Name="kinectRegion" >
    <Grid Background="White" Name="gridTest">   
        <k:KinectUserViewer Height="400" Width="300" HorizontalAlignment="Center" VerticalAlignment="Top" DefaultUserColor="#FFF93636" EngagedUserColor="#FF395913" />
        <Button Name="buttonStartSpel" Width="400" Height="200" Margin="0,800,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" Content="Start het spel" Style="{StaticResource KinectCustomButton}" MouseEnter="buttonStartSpel_MouseEnter" MouseLeave="buttonStartSpel_MouseLeave"></Button>
    </Grid>
</k:KinectRegion>

Kinect 2 悬停单击

更新 -

寻找多种方法来解决这个问题,我想出了这个解决方案:

我们在窗口加载时执行了代码。

void KinectPointerPointSample_Loaded(object sender, RoutedEventArgs e)
    {
        // Listen to Kinect pointer events
        KinectCoreWindow kinectCoreWindow = KinectCoreWindow.GetForCurrentThread();
        kinectCoreWindow.PointerMoved += kinectCoreWindow_PointerMoved;
    }
    private void kinectCoreWindow_PointerMoved(object sender, KinectPointerEventArgs args)
    {
        KinectPointerPoint kinectPointerPoint = args.CurrentPoint;
        bool isEngaged = kinectPointerPoint.Properties.IsEngaged;
        if (isEngaged)
        {
            System.Drawing.Point mousePt = new System.Drawing.Point((int)(kinectPointerPoint.Position.X * kinectRegion.ActualWidth - 80), (int)(kinectPointerPoint.Position.Y * kinectRegion.ActualHeight));
            System.Windows.Forms.Cursor.Position = mousePt;
        }            
    }

注意到鼠标指针与手指针的位置不完全相同,我已经测试了一下,结果为阴性。这就是为什么我将鼠标指针稍微靠左放置到手指针(确切地说是 80 像素)的原因。您可以根据您的项目进行游戏。最后,我们使用以下代码隐藏鼠标指针:

this.Cursor = Cursors.None;

现在我们可以使用 OnMouseEnter 和 OnMouseLeave 事件...我希望这对任何遇到此问题的人有所帮助。