Leap MotionアプリをWindowsストアに申請して認定させる
次に、ソリューション・エクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト1のコードを記述します。
ロジックコードを記述する
リスト1 (MainWindow.xaml.vb)
Imports Windows.UI ‘ Windowsストア・アプリにバックグラウンドで受信されるリアルタイムネットワーク通知に対して、ネットワーク通信とクラスで ‘ 使用するための、ソケットとWebSokectsクラスを提供する、Windows.Networking.Sockets名前空間 ‘ をインポートします。 Imports Windows.Networking.Sockets ‘ シーケンシャルアクセスストリームおよびランダムアクセスストリームに対する読み取りと書きこみをサポートするクラスの含まれる、 ‘ Windows.Storage.Streams名前空間をインポートします。 Imports Windows.Storage.Streams ‘ Json のシリアル化に関連するクラスを提供するSystem.Runtime.Serialization.Json名前空間をインポートします。 Imports System.Runtime.Serialization.Json ‘ マルチスレッドプログラミングを実現するクラスとインターフェイスを提供するクラスの含まれる、 ‘ System.Threading名前空間をインポートします。 Imports System.Threading ‘ JSON の配列、値、およびオブジェクトのサポートを提供するクラスの含まれる、Windows.Data.Json ‘ 名前空間をインポートします。 Imports Windows.Data.Json ‘ JSONにLINQ を実装するクラスを提供する、Newtonsoft.Json.Linq名前空間をインポートします。 Imports Newtonsoft.Json.Linq ‘ フレームワークのコア サービスの実装に使用されるクラスを提供する、Newtonsoft.Json名前空間をインポートします。 Imports Newtonsoft.Json Public NotInheritable Class MainPage Inherits Page ‘ WebSocketを使用して、メッセージ全体の読み取りと書きこみを可能にするネットワーク通信を可能にする、 ‘ MessageWebSocketクラス型のメンバー変数Clientを宣言します。 Private Client As MessageWebSocket ‘ 同じく、MessageWebSocketクラス型のメンバー変数messageWebSocketを宣言します。 Private messageWebSocket As MessageWebSocket ‘ XML要素を表すXElementクラス型のメンバー変数xmldocを宣言します。 Private xmldoc As XElement ‘ 指定した型のコレクションに対する単純な反復処理をサポートする列挙子を公開する、 ‘ IEnumerable(Of System.Xml.Linq.XElement)インターフェイス型のメンバー変数myPointablesを宣言します。 Private myPointables As IEnumerable(Of System.Xml.Linq.XElement) Private myPointableCount As Integer ‘ 乱数を発生させるRandomクラス型のメンバー変数Rndを宣言します。 Private Rnd As Random Private messageText As String Private flag As Boolean = False
ページがアクティブになった時の処理
AddHandlerステートメントで、構成ツリーのオブジェクトがレンダリングされる直前に発生する、CompositionTarget.RenderingイベントにCompositionTarget_Renderingイベントハンドラを追加します。 コンピュータでランダムな数字を発生させるDataShowメソッドを実行します。
Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) AddHandler CompositionTarget.Rendering, AddressOf Me.CompositionTarget_Rendering DataShow() End Sub
ランダムな数字を発生させる処理
Randomクラスの新しいインスタンスRndを生成し、1から6までのランダムな数値を発生させます。しかし、戻り値の範囲にmaxValueは含まれないため、6の上限値は生成されません。よって、このアプリでは1から5までのランダムな数値が生成されることになります。1から5までの乱数ということで、Dim myRnd = Rnd.Next(1, 5)と指定すると、5は戻り値の範囲に含まれませんので、1から4までの間の乱数しか生成されないため、注意してください。名前がsourceTextBoxにこのランダムな数値を表示しておきます。ただし、非表示になっています。
Private Sub DataShow() Rnd = New Random Dim myRnd = Rnd.Next(1, 6) sourceTextBox.Text = myRnd.ToString End Sub
構成ツリーのオブジェクトがレンダリングされる直前に発生する、CompositionTarget.Renderingメソッド
ブール型変数connectingをTrueで初期化します。
通信がされていない時は、新しいMessageWebSocketのインスタンスClientオブジェクトを作成します。
AddHandlerステートメントで、メッセージがMessageWebSocketオブジェクトで受信された時に発生するMessageRecievedイベントにClient_MessageReceivedイベントハンドラを追加します。
AddHandlerステートメントで、終了ハンドシェイクの一部として、終了フレームがMessageWebsocketオブジェクトで受信された時に発生する、Closedイベントに、Client_Closedイベントハンドラを追加します。
MessageWebSocketオブジェクトに構成される、WebSocketメッセージ型としてUtf8を指定します。
MessageWebSocketオブジェクトで、リモートネットワーク送信先に接続する非同期操作である、ConnectAsyncメソッドにポート6437を指定します。指定する方法としては、
Await Client.ConnectAsync(New Uri("ws://127.0.0.1:6437/"))
と指定します。
ブール型変数connectingをFalseで初期化します。
例外が発生した時に、ブール型変数connectingがFalse、かつ通信がされていた場合は、通信のリソースを解放、または解除します。
非同期処理で行われるため、メソッドの先頭にAsyncを追加します。
Private Async Sub CompositionTarget_Rendering(sender As Object, e As Object) Dim connecting As Boolean = True Try If Client Is Nothing = True Then Client = New MessageWebSocket AddHandler Client.MessageReceived, AddressOf Client_MessageReceived AddHandler Client.Closed, AddressOf Client_Closed Client.Control.MessageType = SocketMessageType.Utf8 Await Client.ConnectAsync(New Uri("ws://127.0.0.1:6437/")) connecting = False End If Catch If connecting = False AndAlso Client Is Nothing = False Then Client.Dispose() Client = Nothing End If End Try End Sub
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プログラムを作る
- ローカル・ディスク上でのファイル操作