C# 识别两个骨骼Kinect
我用kinect做了一个游戏(pong),我可以识别一个骨架,我可以做手势来控制左边的棍子,但是当我尝试与两个玩家玩游戏时,我无法识别其他玩家的骨架。这就是我目前所做的:C# 识别两个骨骼Kinect,c#,kinect,kinect-interaction,C#,Kinect,Kinect Interaction,我用kinect做了一个游戏(pong),我可以识别一个骨架,我可以做手势来控制左边的棍子,但是当我尝试与两个玩家玩游戏时,我无法识别其他玩家的骨架。这就是我目前所做的: private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { Skeleton[] skeletons = new Skeleton[0]; using
private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
Skeleton[] skeletons = new Skeleton[0];
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletons);
}
if (skeletons.Length != 0)
{
foreach (Skeleton skel in skeletons)
{
if (skel.TrackingState == SkeletonTrackingState.Tracked)
{
this.tracked(skel);
this.trackedLeft(skel);
}
}
}
}
}
public void tracked(Skeleton skeleton)
{
Joint jHandRight = skeleton.Joints[JointType.HandRight];
Joint jHipCenter = skeleton.Joints[JointType.HipCenter];
if ((jHipCenter.Position.Z - jHandRight.Position.Z) > 0.2)
{
//Consider hand raised in front of them
//System.Diagnostics.Debug.WriteLine("Hand: Raised");
//MessageBox.Show("POR FAVORRRRRRRR");
//movement[0] = false;
movement[0] = true;
movement[1] = false;
}
else
{
//Hand is lowered by the users side
//System.Diagnostics.Debug.WriteLine("Hand: Lowered");
//MessageBox.Show("A SERRRRIIIIIOOOOOOOOOOOOOO");
//movement[1] = false;
movement[1] = true;
movement[0] = false;
}
}
有人可以帮我。你需要一种区分骨架一和骨架二的方法。请参阅以了解如何执行此操作。然后可以将玩家1和玩家2的骨架传递给两种不同的方法。我使用玩家ID是因为如果一个骨架丢失一两帧,它们的ID将保持不变
int id1 = 0, id2 = 0;
...
if (skeletons.Length != 0)
{
foreach (Skeleton skel in skeletons)
{
if (skel.TrackingState == SkeletonTrackingState.Tracked)
{
if (skel.TrackingID == id1)
this.tracked(skel);
else if (skel.TrackingID == id2)
this.trackedLeft(skel);
else
{
if (id1 != 0 && id2 == 0)
id2 = skel.TrackingID;
else if (id2 != 0 && id1 == 0)
id1 = skel.TrackingID;
}
}
}
}
如何区分玩家1和玩家2?目前我无法区分,我读到kinect可以识别两个玩家。。。也许是给身份证,但不知道如何识别你的意思是两个身份证都是一样的?@mason No haha不小心弄乱了我的代码。。。检查我的编辑我有一个问题,在这种情况下,如果(id1!=0&&id2==0)id2=skel.TrackingID;如果(id2!=0&&id1==0)id1=skel.TrackingID代码>我试过了,但它从未通过那里。。。我遗漏了什么吗?我找到了区分这两个玩家的方法,谢谢你的帮助:)@seal当第一个id被分配(id1)时,条件是满足的,所以它不是零,但id2的起始值仍然是零,所以它将新id分配给id2