2

OK、私は LEAP Motion を使用しています。聞いたことがない場合は、ケーブルを介して画像を送信するレーザーを発射し、その画像を処理して指や手などの結果を得るデバイスです。 . ミリ秒ごとにフレームを介してこのデータを撮影します (私はそう思います)。

だから私がやっていることは、Leapの上に1本の指があるかどうかを検出することです.次に、次のコードを使用します:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);

CGEventRef pressedDKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)0x02, YES);

CGEventRef pressedDKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)0x02, NO);

CGEventPost(kCGAnnotatedSessionEventTap, pressedDKeyDown);
CGEventPost(kCGAnnotatedSessionEventTap, pressedDKeyUp);

CFRelease(pressedDKeyDown);
CFRelease(pressedDKeyUp);
CFRelease(source);

これは「D」キーを押すことをシミュレートし、機能します! でも何度も!LEAP Motion は約ミリ秒ごとにフレーム画像で更新されるため、D キーを何度も押す必要があります。スケジュールされた各イベントの間に、できれば約0.5秒の休憩を追加したいと思います。

これを行う方法はありますか?をセットアップする必要がありますNSTimerか?

4

2 に答える 2

0

キーを投稿したときに記録するだけではどうでしょうか。それ以降のイベントが到着したら、現在の時刻を最後にキーが投稿された時刻と照合します。十分な時間が経過していない場合は、現在のイベントを無視してください。

于 2013-02-09T20:37:07.740 に答える
0

Leap の上で 1 本の指が検出されたときに呼び出されるメソッドから 2 番目のメソッドを呼び出すことができます。

[self performSelector:@selector(pressDKey) withObject:nil afterDelay:0.5];

その 2 番目のメソッドが呼び出されpressDKey、そこにキー プレス イベントをポストするコードを配置します。pressDKeyメソッドに以下を入れることも忘れないでください。

[self cancelPreviousPerformRequestsWithTarget:self selector:@selector(pressDKey) object:nil];
于 2013-02-09T15:59:22.500 に答える