Leap MotionアプリをWindowsストアに申請して認定させる
メッセージがMessageWebSocketオブジェクトで受信された時に発生するイベント
入力データからデータを読み取るDataReaderクラス型の変数readerを宣言し、MessageWebSocket上のリモートネットワーク送信先から受け取った受信データを読み取り、readerに格納します。
入力ストリームのUnicode文字コードエンコードをUtf-8に設定します。
文字列型のread変数を宣言し、DataReaderであるreaderのReadStringメソッドで、読み取られなかったバッファーサイズ(reader.UnconsumedBufferLength)で初期化された、入力ストリームから文字列値を読み込みます。
TextBoxであるOutPutFieldと文字列型のreadに改行を追加した値を引数にMarshalTextメソッドを実行します。
例外が発生した場合は処理を抜けます。
Private Sub Client_MessageReceived(sender As MessageWebSocket, e As MessageWebSocketMessageReceivedEventArgs) Try Using reader As DataReader = e.GetDataReader reader.UnicodeEncoding = UnicodeEncoding.Utf8 Dim read As String = reader.ReadString(reader.UnconsumedBufferLength) MarshalText(OutPutField, read & vbCrLf) End Using Catch Exit Sub End Try End Sub
WebSocketからのデータを受信して、その内容から値を取得して、Leap Motionとの通信を行う処理
RunAsyncメソッドで、UIスレッドの提供されているコールバックをワーカースレッドからスケジュールし、結果を非同期に返します。
TextBoxクラスであるoutputのTextプロパティにvalue(read & vbCrLf)の値を指定します。
XNode型の変数myNodeを宣言し、JsonConvert.DeserializeXNodeメソッドで、outPut.TextのJsonの値を、ルート要素をLeapとしたXMLに変換し、myNodeに格納します。
XElement.ParseメソッドでmyNode.ToString(XMLに変換されたJsonデータ)を文字列として読み込み、xmldocで参照します。
コレクション繰り返しメンバー変数、myPointableで
resultTextBoxの値が0出ない場合、すなわちグー以外の場合は、ブール型メンバー変数flagをTrueで初期化します。
ランダムな数値の格納されているsourceTextBoxの値と、Leap Motionにかざした指の本数が同じなら、メッセージを表示するmessageTextBlockの文字色をRedにし、メンバー変数messageTextに「"私は" & sourceTextBox.Text & "の数字を思っていました。すごい!正解です。"」と指定します。
そうでない場合は、messageTextBlockの文字色をGrayにし、メンバー変数messageTextに「"私は" & sourceTextBox.Text & "の数字を思っていました。残念!不正解です。"」と指定します。
messageTextBlockにmessageTextの値を表示します。
resultTextBloxの値が0、つまりLeap Motion上に指をかざしていない状態で、且つブール型変数flagがTrueで初期化されている場合は、messageTextBlockの内容をクリアし、再度乱数を発生させるDataShowメソッドを実行します。ブール型変数flagをFalseで初期化します。例外が発生した場合は、処理を抜けます。
Private Sub MarshalText(output As TextBox, value As String) Dim ignore = output.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, Sub() Try output.Text = value Dim myNode As XNode = JsonConvert.DeserializeXNode(output.Text, "Leap") xmldoc = XElement.Parse(myNode.ToString) myPointables = From c In xmldoc.Descendants("pointables") Select c myPointableCount = myPointables.Count resultTextBox.Text = myPointableCount If resultTextBox.Text <> 0 Then flag = True If sourceTextBox.Text.Equals(resultTextBox.Text) Then messageTextBlock.Foreground = New SolidColorBrush(Colors.Red) messageText = "私は" & sourceTextBox.Text & "の数字を思っていました。すごい!正解です。" Else messageTextBlock.Foreground = New SolidColorBrush(Colors.Gray) messageText = "私は" & sourceTextBox.Text & "の数字を思っていました。残念!不正解です。" End If messageTextBlock.Text =messageText ElseIf resultTextBox.Text = 0 AndAlso flag = True Then messageTextBlock.Text = String.Empty DataShow() flag = False Exit Sub End If Catch Exit Sub End Try End Sub) End Sub
終了フレームがMessageWebsocketオブジェクトで受信されて時に発生するイベント
通信がされている場合は、通信のリソースを解放、または解除します。
Private Sub Client_Closed(sender As IWebSocket, e As WebSocketClosedEventArgs) If Client Is Nothing = False Then Client.Dispose() End If End Sub End Class
以上のコードで、WACK3.1の検証は合格します。ただし各ロゴを作成しておくことを忘れないようにしてください。
また、Windows ストアに申請する場合は、説明や担当者コメント欄に操作説明以外に、下記のように書いておく必要があります。
******************//説明や担当者のコメントに必ず記述する//****************
「■デバイスとしてLeap Motionを必要とします。Leap Motionが接続されていない場合は動作しません。■
このアプリでは127.0.0.1にループバック接続を行っています。そのため、"Windows 8 AppContainer Loopback Utility"を管理者権限で実行して、アプリに対してループバック接続を許可してください。
"Windows 8 AppContainer Loopback Utility"のダウンロードURLは以下になります。
http://www.telerik.com/fiddler/add-ons
※リンク先のページを下の方にスクロールすると、「Windows 8 AppContainer Loopback Utility」の項目がありますので、こちらのDownloadボタンをクリックして下さい。
"Windows 8 AppContainer Loopback Utility"がダウンロードできたら管理者権限で実行し「このアプリに付けた名前」の行にチェックを付けて保存してください。」
***************************************************************************
ループバック接続をしないと、Leap Motionのアプリは全く動きませんので、必ず上記ユーティリティをダウンロードしてもらう必要があります。使い方は簡単です。一度、読者の皆様がダウンロードして触ってみることをお勧めします。
今回はここまでです。また次回の記事でお会いしましょう。
Leap Motionを使ったWindowsアプリのサンプル
『Windows 8.1+Visual Studio 2013によるWindows ストア・アプリ開発実例集』 第6回のサンプルプログラムです。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 画面上を流れる数字を暗算して正解を求めるアプリを作ろう(その2)
- 画面上の図形を5本の指で操作する基本的なLeap Motionプログラムを作る
- Leap Motionのスクリーン・タップを使った音声の再生と画像の表示
- Leap Motionで画像のトリミングと保存を行うためのサンプルプログラムを作る
- 張子の虎をキー・タップすると頭が上下に動くLeap Motionプログラムを作る
- マウス・カーソルで指定した画像の一部を拡大表示するLeap Motionプログラム
- モーションセンサーとShareStatusTask、MediaPlayerLauncherを使う
- 選択した画像を指の動きに合わせて回転させるLeap Motionプログラムを作る
- 手の動きに合わせて画面上のキャラクターを操作するLeap Motionプログラムを作る
- ローカル・ディスク上でのファイル操作