Kinect + GlovePIEまたはゲームの開発を開始する方法

Kinect SDKを扱うことは難しくありません。インターネット上で、Kinectアプリケーションの作成とキーポイントの処理のプロセスを詳細に説明する多くの教育ビデオをすばやく見つけることができます。



最初に遭遇した問題は、すべてのアプリケーション、特にゲームが標準のメッセージループで動作するわけではないことです。 この記事で説明するのは、この問題を解決することです。



ウィンドウアプリケーションがメッセージループで実行される場合、ゲームは多くの場合、デバイスから直接クリックを読み取ります。 したがって、問題の解決策は独自のドライバーを作成することですが、特にドライバーの作成経験がない場合は時間がかかりすぎますが、実際にはまったく異なるものに興味があります。



GlovePIEは、独自のスクリプト言語を備えたスタンドアロンアプリケーションです。これにより、キーボードでもジョイスティックでも、さまざまなデバイスのエミュレーターをすぐに作成できます。 このアプリケーションの2番目の機能は、メッセージループでも機能することです。これにより、PostMessage関数を使用してキーストロークをエミュレートできます。



直接的なクリックではなく、アプリケーションからのメッセージを処理するため、小さく非常に明白なスクリプトが必要です。

A = A

S = s

スペース=スペース



名前に拡張子.PIEを付けて保存すると、コードでGlovePIEを起動するときに便利になります。 次のステップは、プログラムにメッセージを送信するC#で独自のクラスを作成し、対応するキーを押すことをエミュレートすることです。

using System; using System.Diagnostics; using System.Threading; using System.Runtime.InteropServices; class KeyEmulator { const UInt32 WM_KEYDOWN = 0x0100; const UInt32 WM_KEYUP = 0x0101; Process GlovePIE; public KeyEmulator() { if(GlovePIE == null) { GlovePIE = new Process(); GlovePIE.StartInfo = new ProcessStartInfo(“path_to_glovepie\\PIEFree.exe”, “-emulator.PIE”); if(!GlovePIE.Start()) throw new Exception(“Can't start emulator process”); } } }
      
      





コンストラクターで、追加の初期化パラメーターを追加するか、通常は既定で目的のスクリプトが実行されていると仮定してプロセスに参加するだけです。 シグナルを送信する関数をクラスに追加することは残っています。

 [DllImport("user32.dll")] static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); public bool KeyDown(int key_id) { bool result = PostMessage(GlovePIE.MainWindowHandle, WM_KEYDOWN, (IntPtr)key_id, (IntPtr)0); Thread.Sleep(99); return result; }
      
      





エミュレートするキーコードを指定する必要があります。 メッセージはGlovePIEに送信され、キーボードの直接キーストロークのエミュレーションが作成されます。



おそらく、これは外部からそれほど美しく見えません:メインアプリケーションと一緒に起動する必要があるサードパーティのプログラム。 それでも、これは任意のアプリケーションにメッセージを送信するための簡単で手頃な方法です。



All Articles