LeapMotionAS3雑感

By | 2013年7月27日

秋葉原ゆるゆるLeapMotion勉強会に行ってきました。
会は主にLeapMotionを使うまでの登録だったり必要なもののダウンロードとUnity&LeapMotionの連携についての話で、その後はもくもく会で各自もくもく。
私は基がFlash屋なので、LeapMotionAS3を触ってました。サンプルを動かす位しかできませんでしたが、基本動作は掴めたのであとはアイデアとクリエイティブ次第で何とかなるような感じに思えました。

●前準備
今回環境は Flash CC を使いました。まずはライブラリの追加ですが、スマホアプリ開発でもおなじみのANEを使いますので /bin/LeapMotionAS3.ane を登録しておきます。 ane登録時はswcを登録するボタンの隣ですのでお気をつけ下さい。
以上で準備完了です。

●検知の基本
Event.ENTER_FRAME の様なセンサーを監視するイベント(LeapEvent.LEAPMOTION_FRAME)があり、この中でスワイプや円を描くような動き、キータップ、指を押し込むといったジェスチャーを検知します。

●サンプル:SwipeGallery
スワイプ操作を検知するサンプルです。
/src-examples/samples/swipeGallery/ 内のSwipeGallery.as をドキュメントクラスに設定後、デスクトップAIRとしてパブリッシュします。
感度は正直、あまり良くなく、結構大振りでLeapの上をゆっくり目に動かさないと反応しないです。連続反応も難しいです。

が、これはセンサーの感度というよりは実装方法によるところが大きい様な気がします。
サンプルでは一度検知すると次が0.5秒後なので、ブンブン振っても思ったようには動かないと思います。
この間隔を調整するのは当然として、滑らかに動かすとなると、スワイプジェスチャーの判定を使うのではなく、指の座標を自前で監視することになりそうな気がします。

protected function leapmotionFrameHandler( event:LeapEvent ):void
{
	var now:int = getTimer();
	if ( now - lastSwipe > 500 ){
		var gestures:Vector.<Gesture> = event.frame.gestures();
		for each( var gesture:Gesture in gestures ){
			if ( gesture is SwipeGesture && gesture.state == Gesture.STATE_STOP ){
				var swipe:SwipeGesture = gesture as SwipeGesture;
				if ( Math.abs( swipe.direction.x ) > Math.abs( swipe.direction.y ) ){
					if ( swipe.direction.x > 0 ){	currentImageIndex--;	}
					else{	currentImageIndex++;	}
					lastSwipe = now;
					break;
				}
			}
		}
	}
}

ただ、入力を単純に置き換えるだけであれば気持ちよさの調整はあるものの、組み込み自体はイベントを登録するだけなのでカルーセル系のコンテンツへの導入は簡単ではないでしょうか。

もう1つのサンプルは、Away3Dを使った3D座標の検知で、中身としては指先の座標を表示しているだけなので特にこれと言った点は無いかと思います。ただ、60fpsでもヌルヌル動く(1世代前のMacBookAir)ので、表示オブジェクト次第ではありますが、ろくろを回したり、結構滑らかにいきそうです。
また、LeapMotionとは関係ないですが、こちらはAway3Dを使うので、レンダリングモードはダイレクトで、app.xmlに depthAndStencil を true にするのを忘れずに。
参考:Memo, FDT 5.5でAIR for iOSのプロジェクト設定 « イナヅマTVログ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です