我刚刚创建了一个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++;
}
}
Run Code Online (Sandbox Code Playgroud)
事情是id = 0第一个检测到的玩家(称之为player1)的程序给出,第二个被检测的玩家(称之为player2)为1.当player2从游戏中退出并重新加入时,没有问题.它再次需要id = 1.但是当玩家1离开游戏时,玩家2 id = 0因为它是此时第一个被检测到的玩家.
有解决方案吗
每个玩家在 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];
Run Code Online (Sandbox Code Playgroud)
您可以使用该索引来识别您的球员是否离开并回来。
但是,如果两个玩家都离开 Kinect 的视线,那么当他们再次进入 Kinect 可见范围时,玩家索引就不会正确。