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