先日のf-siteセミナーでFlashにWebカメラ埋め込んだものを使用したのですが
その流れでAS3でWebカメラを用いるときはどうなるか試してみました。今回もサンプルつきです。
まずはじめにAS3でも基本的にはやり方は変わらなかったので安心しました。
ただ、Camera.onActivityによるモーション検知がどうやるのかと探したところ、
AS3ではflash.events.ActivityEventを使ったリスナーにお世話になりました。
やはり、AS3ではリスナーの考え方は大事なようです。
まず、外部ファイルだと以下のようになります。
[外部ファイル]
package {
import flash.display.Sprite;
import flash.media.Camera;
import flash.media.Video;
import flash.events.ActivityEvent;
public class MyCamera extends Sprite {
public function MyCamera() {
// カメラソースを取得
var tape:Camera = Camera.getCamera();
// 表示処理
if ( tape != null ) {
// ビデオオブジェクト配置:サイズ指定
var video:Video = new Video( 320 , 240 );
// カメラ設定
video.attachCamera( tape );
// モーション検知リスナー
tape.addEventListener( ActivityEvent.ACTIVITY , activityHandler );
// addChildで表示
addChild( video );
} else {
// カメラが接続されてないときはダメ画像表示
var mcNoCamera = new NoCamera();
// addChildで表示
addChild( mcNoCamera );
}
}
private function activityHandler( event:ActivityEvent ):void {
if( event.activating == true ){
trace( "モーション検知:カメラが動きました。" );
}
}
}
}
フレームで記述する場合は以下の通りです。
[フレーム]
// カメラソースを取得
var tape:Camera = Camera.getCamera();
if ( tape != null ) {
// カメラ設定
video.attachCamera( tape );
// モーション検知リスナー
tape.addEventListener( ActivityEvent.ACTIVITY , activityHandler );
} else {
// カメラが接続されてないときはダメ画像表示
var mcNoCamera = new NoCamera();
// addChildで表示
addChild( mcNoCamera );
}
function activityHandler( event:ActivityEvent ):void {
if( event.activating == true ){
trace( "モーション検知:カメラが動きました。" );
}
}
今回気づいた点は以下の通りです。
・ビデオオブジェクトの配置についてはaddChildを使う。
・ビデオオブジェクトにWebカメラをアタッチする方法は以前と同じ。
・flash.events.ActivityEventリスナー登場。
・ActivityEvent.activating はカメラのモーション検知が取れる。
また、サンプルも以下に置きます。
_____________________________________________________
参考文献
livedocs:AS3で引越したAS1/2クラス群
http://livedocs.macromedia.com/labs/as3preview/langref/migration.html
この記事へのコメント
●1.こーじ(2007年10月18日 13:42)
サンプルをダウンロードしてみたかったのですが
ページが表示されませんでした。
配布はもう終了でしょうか?
●2.田中 正吾(2007年10月22日 19:04)
>こーじ様
申し訳ないです。
自分のところのサブドメインの移行でリンクが切れてしまっていたようでした。
至急復帰しましたー!