我刚刚创建了一个2人游戏(比如ShapeGame) ,但问题是当其中一个玩家从游戏场景中出来时,我无法察觉哪个玩家离开游戏
认为游戏中有2辆车。首先检测到的玩家(称之为player1)使用左侧玩家,玩家2使用右侧玩家。当player1离开场景时,突然player2控制左车,如果player1重新加入游戏,则player1再次取回对左车的控制权,且player2控制右车。
int id = 0;
foreach (SkeletonData data in skeletonFrame.Skeletons)
{
if (SkeletonTrackingState.Tracked == data.TrackingState)
{
// do some work
id++;
}
}
事情是程序给第一个检测到的玩家id = 0
(称之为player1),第二个检测到的玩家为1(称之为玩家2)。当player2从游戏中退出并重新加入时,没有问题。它再次需要id = 1
。但是当玩家1离开游戏时,玩家2需要id = 0
,因为它是此时第一个被检测到的玩家。
任何解决方案?
答案 0 :(得分:3)
每个玩家在Skeleton数组中都有一个索引:
void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) {
SkeletonFrame sf = e.SkeletonFrame;
//check which skeletons in array are active and use that array indexes for player index
SkeletonData player1 = sf.Skeletons[playerIndex1];
SkeletonData player2 = sf.Skeletons[playerIndex2];
如果有人离开并返回,您可以使用该索引识别您的玩家 但是如果两个玩家都看不到Kinect,那么当他们再次进入Kinect可见性时,玩家索引是不正确的。