Kinect:获取/释放

本文关键字:释放 获取 Kinect | 更新日期: 2023-09-27 17:50:41

我是Kinect编程的初学者。然而,我读了关于它的不同教程和文本。此外,我还在编写代码示例("Controls base - wpf")。不幸的是,没有一个资源能教我如何以我理解的方式抓取和发布代码。

我想创建动态的KinectTileButtons。当程序运行时,用户应该能够将按钮放置到他喜欢的位置。玩家用手作为光标。例如:在左上角有一个按钮b1。当用户的手不在b1时,按钮不会改变他的位置。如果用户的手放在按钮上,并且他做出了"GRAB"手势,按钮的位置就像他的手的位置一样(可变位置)。当他释放时,按钮的位置是恒定的,直到用户下一次抓住按钮时才会改变。

我非常感谢任何建议,建议或代码示例,因为我真的不知道我应该如何继续解决这个问题。

提前感谢derpate

Kinect:获取/释放

你应该做的是改变按钮在窗口上的位置。我会有一些全局的bool来表示它们在抓取和保持。然后我将在更新中添加一个条件,将标签移动到手的位置。下面是一些伪代码:

bool grabbing = false;
bool selected = false;
var button;
var handElement;
Start()
{
    button = window.Button;
    handElement = window.handElement;
    ...
    sensor.Start();
}
Update() //all frames ready
{
    using (SkeletonFrame sf = e.OpenSkeletonFrame())
    {
        ... //get skeleton and position
        ... //tell if grabbing
        if (/*however you do the grab gesture*/)
            grabbing = true;
        if (selected && grabbing)
        {
            button.X = handElement.X;
            button.Y = handElement.Y;
        }
    }
}
Button_OnClick()//or whatever it is called for the Kinect UI control
{
    selected = true;
}

对不起的伪代码,我只是没有工作与Kinect UI之前,我不想有一半伪代码的元素,我不知道,但我知道它有像OnClick()的事件,当它被持有,我不知道你的意思是"GRAB"手势,但我假设你知道如何实现它,如果你知道它是什么。好运!

也知道这只适用于一个按钮。如果你经常这样做,我建议你上一门课……比如:

class MoveableButton : KinectButton//again, don't know the exact name of this
{
    private int X, Y;
    private bool selected = false, grabbing = false;
    public void Selected()
    {
        selected = true;
    }
    public void Grabbed()
    {
        grabbing = true;
    }
    public void LetGo()
    {
        grabbing = false;
        selected = false;
    }
    public void Update(UIElement hand)
    {
        if (selected && grabbing)
        {
            this.X = hand.X;
            this.Y = hand.Y;
        }
    }
}

然后你会在特定的帧中调用适当的方法,我将有一个数组来循环Update