今回は、MouseEventについて
1.描画領域全体に対するマウスイベント
2.3Dオブジェクトに対するマウスイベント
の2つを考える。
特に後者はPapervison3Dの1.5から仕様変更があったので、そこのポイントを押さえる。
実際にやってみるのは、
1.画面上でマウスをドラッグするとCubeを回転
2.マウスオーバーすると拡大、マウスアウトすると元に戻す
ソース(myMouseEvent.mxml)
1.画面をドラッグするとCubeを回転
・イベント自体はPapervision3D特有のものでもなんでもなく、フツーのFlexのイベント
なので、thisにaddEventListenerするだけでマウスイベント自体は取れる
・イベントの内容は自体は、マウスが押されているかどうかを保持するisMouseDown:Booleanと、ドラッグした距離に比例して素早く回転させたいのでドラッグの始点となる座標を保持だけ
・実際の回転は、36行目でaddEventListerされたENTER_FLRAMEつまり毎フレーム呼ばれる関数内に書けばいい
2.マウスオーバー ・これはPapervision3dのEventで、1.5ではSceneはInteractiveScene3Dを使わなければならなかったり、MovieScene3Dでオブジェクトをその直下に配置しなければならないなどメンドクサイことがいっぱいあったけど、GreateWhiteではScene系のクラスはScene3Dのみになっている。
なので、マウスという2次元の座標に対し、3D次元空間にあるObjectのEventの為に計算を頑張るかは、それぞれのinteractiveというプロパティがtrueになっているかによって決まる。
まず、ViewPort3Dのインスタンスのinteractiveプロパティをtrueにする。コンストラクタでいうと4番目の引数がそれであるので、trueにする。
・次にCubeのオブジェクトにイベントを付けたいので、こいつのMaterialのinteractiveプロパティもtrueにしとく。(何でもかんでもtrueにすると重くなるので、使うやつだけにする)
・最後にaddEventListerして終わり。
以上メモ終わり
1.描画領域全体に対するマウスイベント
2.3Dオブジェクトに対するマウスイベント
の2つを考える。
特に後者はPapervison3Dの1.5から仕様変更があったので、そこのポイントを押さえる。
実際にやってみるのは、
1.画面上でマウスをドラッグするとCubeを回転
2.マウスオーバーすると拡大、マウスアウトすると元に戻す
ソース(myMouseEvent.mxml)
1.画面をドラッグするとCubeを回転
・イベント自体はPapervision3D特有のものでもなんでもなく、フツーのFlexのイベント
なので、thisにaddEventListenerするだけでマウスイベント自体は取れる
・イベントの内容は自体は、マウスが押されているかどうかを保持するisMouseDown:Booleanと、ドラッグした距離に比例して素早く回転させたいのでドラッグの始点となる座標を保持だけ
・実際の回転は、36行目でaddEventListerされたENTER_FLRAMEつまり毎フレーム呼ばれる関数内に書けばいい
2.マウスオーバー ・これはPapervision3dのEventで、1.5ではSceneはInteractiveScene3Dを使わなければならなかったり、MovieScene3Dでオブジェクトをその直下に配置しなければならないなどメンドクサイことがいっぱいあったけど、GreateWhiteではScene系のクラスはScene3Dのみになっている。
なので、マウスという2次元の座標に対し、3D次元空間にあるObjectのEventの為に計算を頑張るかは、それぞれのinteractiveというプロパティがtrueになっているかによって決まる。
まず、ViewPort3Dのインスタンスのinteractiveプロパティをtrueにする。コンストラクタでいうと4番目の引数がそれであるので、trueにする。
・次にCubeのオブジェクトにイベントを付けたいので、こいつのMaterialのinteractiveプロパティもtrueにしとく。(何でもかんでもtrueにすると重くなるので、使うやつだけにする)
・最後にaddEventListerして終わり。
以上メモ終わり