Wiiリモコンを使ってみるテスト
この辺を参考にして、Wiiリモコンを.NETから使ってみるテスト(・∀・)
使い方としてはこんな感じです。
まず、WiimoteクラスのインスタンスとMutexをFormのメンバ変数に用意。
MutexはWiimoteクラスからのイベント時の排他に使用。
// インスタンス作成 Wiimote wm = new Wiimote(); // イベントの排他制御用 Mutex mutex = new Mutex();
初期化としては、イベントハンドラの登録と接続、バッテリー状態取得の開始とか。
// イベント登録 wm.OnWiimoteChanged += new WiimoteChangedEventHandler(OnWiimoteChanged); // 接続 wm.Connect(); // バッテリー取得開始 wm.GetBatteryLevel();
これでWiiリモコンの状態がOnWiimoteChanged()にあがるようになります。
で、終了処理はDisconnect()で。
// 切断
wm.Disconnect();
イベントの処理はこんな感じで。
// イベント void OnWiimoteChanged(object sender, WiimoteChangedEventArgs args) { mutex.WaitOne(); // Aボタンの状態 bool isApressed = args.WiimoteState.ButtonState.A; ... mutex.ReleaseMutex(); }
Mutexを使っているのは、この処理は非同期読み取りのスレッドプールから呼び出されるので、コールバックを呼び出したスレッド間の排他を行うため。
後、スレッドプールのスレッドから呼び出されるので、Form要素を更新する時にはBeginInvoke()すること。
リモコンの状態に関しては、WiimoteStateクラスのメンバに色々定義されているのでそこを参照。
LED設定なんかはこんな感じで。
// LED設定 wm.SetLEDs(false, false, false, false);
Wiimoteクラスの中身は、HIDデバイスにRead/Writeするような実装になってますね。
- HIDデバイスをCreateFile()してハンドルを取得
- そのハンドルから作ったFileStreamを非同期で読み取り
- 受信したデータから状態を更新してOnWiimoteChanged()イベントをあげる
- LEDの設定等は逆にFileStreamにWrite
っというわけで、この実験をするためだけにWiiリモコンを買ってしまいました。
本体持ってないんですけど〜、金が無いのにまた無駄遣い(´Д`;)
なんか面白い使い道あるかな〜(´ω`)
- 出版社/メーカー: 任天堂
- 発売日: 2006/12/02
- メディア: Video Game
- 購入: 2人 クリック: 138回
- この商品を含むブログ (69件) を見る