0
我只是想能夠做一些事情,當我的骨骼關節(x,y,z)座標超過x,y,z座標按鈕。 。我有下面的代碼,但它不能正常工作。 。隨着一聲我的手移動它會做一些沒有我的手到達按鈕如何使用骨骼關節作爲遊標使用邊界(無手勢)
if (skeletonFrame != null)
{
//int skeletonSlot = 0;
Skeleton[] skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletonData);
Skeleton playerSkeleton = (from s in skeletonData where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();
if (playerSkeleton != null)
{
Joint rightHand = playerSkeleton.Joints[JointType.HandRight];
handPosition = new Vector2((((0.5f * rightHand.Position.X) + 0.5f) * (640)), (((-0.5f * rightHand.Position.Y) + 0.5f) * (480)));
var rightHands = playerSkeleton.Joints[JointType.HandRight];
var rightHandsX = rightHands.Position.X;
var rightHandsY = rightHands.Position.Y;
var rightHandsZ = rightHands.Position.Z;
if (Math.Sqrt(Math.Pow(rightHandsX - position.X, 2) + Math.Pow(rightHandsY - position.Y, 2)) < 20)
{
// Exit();
}
if (Math.Sqrt(Math.Pow(rightHandsX - start_bttn.Bounds.X, 1) + Math.Pow(rightHandsY - start_bttn.Bounds.Y, 1)) < 10)
{
currentGameState = GameState.Selection;
// Exit();
}
if ((rightHandsX < GraphicsDevice.Viewport.Width/2 + 150 && rightHandsX > GraphicsDevice.Viewport.Width/2 - 75) && (rightHandsY > GraphicsDevice.Viewport.Height/2 && rightHandsY < GraphicsDevice.Viewport.Height/2 + 50))
{
currentGameState = GameState.Selection;
}
}
嘿,非常感謝你回答..這個蟎是一個非常愚蠢的問題,但我不明白什麼是雙xScaled&yScaled在做什麼?我們爲什麼需要它? –
這是相對於主顯示器的分辨率將手位置轉換爲屏幕位置的代碼片段。將肩膀映射到屏幕頂部,臀部到臀部,左肩到左側屏幕,以及屏幕右側右肩外側的一小段距離。它爲用戶的胳膊產生一個「點擊框」,因此它們不必在任何給定的方向上大幅拉伸以將光標放在屏幕上的某處。 –