1

我是 Kinect 编程的初学者。然而,我阅读了有关它的不同教程和文本。此外,我正在研究代码示例(“Controls Basis-WPF”)。不幸的是,没有一个资源教我如何以我理解的方式编写代码抓取和发布。

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

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

在此先感谢

4

1 回答 1

0

您应该做的是更改窗口上按钮的位置。我会有一些 global bools 来表示他们正在抓住和持有。然后我会在更新中放置一个条件以将标签移动到手的位置。这是一些伪代码:

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()when的事件它被举行了,我不知道你所说的“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;
        }
    }
}

然后,您将在某些帧期间调用适当的方法,我将有一个数组来循环遍历 for Update

于 2014-03-17T13:16:58.857 回答