0

ストレッチのレップを行うプログラムを作成しているので、レップ数に 1 を追加します。各担当者の間に間隔を置きたい(現在の問題ではない)。これを 内にネストしていAllFramesReadyEventArgsます。問題は、SDK がAllFramesReadyEventプログラム全体を使用するため、無限ループになることです。やりたくないときに繰り返さずに各担当者を行うにはどうすればよいですか? 前もって感謝します。

if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
{
    int whereIsX = (int)Canvas.GetLeft(ellipse1);
    int whereToX = (int)Canvas.GetLeft(pspine);
    whatToMultiplyX = whereToX / whereIsX;

    int whereIsY = (int)Canvas.GetTop(ellipse1);
    int whereToY = (int)Canvas.GetTop(pspine);
    whatToMultiplyY = whereToY / whereIsY;

    Canvas.SetTop(ellipse1, Canvas.GetTop(ellipse1) * whatToMultiplyY);
    Canvas.SetLeft(ellipse1, Canvas.GetLeft(ellipse1) * whatToMultiplyX);

    for (int i = 0; i < Doctor_ShoulderX.Count; i++)
    {
        Canvas.SetTop(doctorHand, Doctor_HandY[i] * whatToMultiplyY);
        Canvas.SetTop(doctorElbow, Doctor_ElbowY[i] * whatToMultiplyY);
        Canvas.SetTop(doctor_Shoulder, Doctor_ShoulderY[i] * whatToMultiplyY);

        Canvas.SetLeft(doctorHand, Doctor_HandX[i] * whatToMultiplyX);
        Canvas.SetLeft(doctorElbow, Doctor_ElbowX[i] * whatToMultiplyX);
        Canvas.SetLeft(doctor_Shoulder, Doctor_ShoulderX[i] * whatToMultiplyX);                        

        handX = Canvas.GetLeft(handright);
        handY = Canvas.GetTop(handright);

        elbowX = Canvas.GetLeft(elbowright);
        elbowY = Canvas.GetTop(elbowright);

        shoulderX = Canvas.GetLeft(shoulderright);
        shoulderY = Canvas.GetTop(shoulderright);

        shoulder_x.Text = "Shoulder X: " + shoulderX.ToString();
        shoulder_y.Text = "Shoulder Y: " + shoulderY.ToString();

        elbow_x.Text = "Elbow X: " + elbowX.ToString();
        elbow_y.Text = "Elbow Y: " + elbowY.ToString();

        hand_x.Text = "Hand X: " + handX.ToString();
        hand_y.Text = "Hand Y: " + handY.ToString();

        Patient_HandX.Add(handX);
        Patient_HandY.Add(handY);

        Patient_ElbowX.Add(elbowX);
        Patient_ElbowY.Add(elbowY);

        Patient_ShoulderX.Add(shoulderX);
        Patient_ShoulderY.Add(shoulderY);
    }
}
4

1 に答える 1

1

コメントが処理できるよりも多くの書き込みが発生するため、回答を使用します:)

aleframesready アクションはすべてのフレームで呼び出されます。したがって、ここでループに20の制限がある場合

for (int i = 0; i < Doctor_ShoulderX.Count; i++)

毎回 0 から 20 まで呼び出されます。クラスに静的ブール変数を作成する必要があります。コードがループから抜けた後、それを false に設定します (開始時に true の場合)。ループ チェックを呼び出す前に、変数が true に設定されているかどうかを確認してください。はいの場合はループを呼び出し、いいえの場合はそのまま続行します

于 2012-07-09T14:22:10.437 に答える