ジェスチャの開始点、プロセス、および終了点を認識する独自のメソッドを作成する必要があります。
出発点: プログラムは、何かを保持しようとしていることをどのように認識しますか? 私が考えることができる簡単なジェスチャーは、2 本の指が 1 つの手のひらにリンクされていることです。そのため、フレーム内で 1 つの手のひらに 2 本の指がリンクし、指が 10 ~ 20 mm 離れている場合、何かを保持するジェスチャーとして認識できます。これらの条件が満たされると、プログラムはジェスチャを認識し、これらの条件内にコードを記述できます。
C# での非常に醜い例:
出発点: ブール値の Gesture_detected = false;
Frame frame = controller.Frame();
HandList hands = controller.Hands;
if (hands.Count == 1)
{
foreach (Hand hand in hands)
{
if (hand.fingers.Count == 2)
{
int fingerA_x,fingerB_x;
foreach (Finger finger in hand.fingers)
{
if(fingerA_x == 0)
{
fingerA_x = finger.x;
} else
{
fingerB_x = finger.x;
}
}
}
}
if((fingerA_x - fingerB_x) < 20)
{
//Gesture is detected. Do something...
gesture_detected = true;
}
}
プロセス: あなたのジェスチャーは何をしようとしていますか? 移動したい場合は、マウス メソッドを呼び出してドラッグする必要があります。イベント MOUSEEVENTF_LEFTDOWN を使用して、PInvoke の下で C++ のメソッド mouse_event() を検索します。
終了点: ドラッグが終了したら、MOUSEEVENTF_LEFTUP などのマウス メソッド イベントを呼び出して、終了したマウス ドラッグをシミュレートする必要があります。しかし、ドラッグを停止する必要がある場合、プログラムはどのように検出するのでしょうか? 最も論理的な方法は、ジェスチャがフレーム内で検出されなくなった場合です。そのため、別のシナリオを処理するために else 条件を記述します。
if (!gesture_detected)
{
// Do something
}