Papervision3Dメモ #18

2007.06.02

階層化された3Dオブジェクトにマウスイベントを付ける

Aquiouxさんのエントリー「Papervision3D でマウスイベント(閃光的網站・弛緩複合体)」にスッキリまとめられているように、PV3Dは階層化された3Dオブジェクトにマウスイベントが付けられない。

スマートに解決できねーもんかなーとPV3DのMLをボーっと見てたらタイムリーな投稿を見つけた。DisplayObject3DのaddChildと、renderメソッドをオーバーライドするクラスで、これを使って3Dオブジェクトの階層化とマウスイベント付加を両立させてみた。

Parent_mouseEvent.swf(要:Flashplayer9)

3つのCubeを親になるrootNodeにaddChildして、マウスイベントはそれぞれのCubeごとに設定、回転の動きはrootNode1つを制御して3つのCubeを同時に動かした。

まず、親になる空ノードを作る

rootNode = new Group( "rootNode" );
scene.addChild( rootNode );

で、

cubeObj =  new Cube( material, planeSize, planeSize, planeSize, segment, segment, segment);
rootNode.addChild( cubeObj );

みたいな感じで親ノードにaddChild。んで、

cubeObj.container.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

とすれば、rootNode内のcubeObjにマウスイベントが付けられる。

比較的スカっと解決っぽいけど、2階層、3階層にペアレントした構造にしたい場合は、いちいちGroupオブジェクトをカマさなくちゃならなくてなんか微妙。Group.asを参考にDisplayObject3D.asにパッチ当てたほうがスマートかなぁ。

【追記】
Away3Dは、階層化した3Dオブジェクトのイベント付加に対応済みの模様。

関連する投稿

Trackback URL : http://blog.r3c7.net/wp-trackback.php?p=81

コメント / トラックバック1件

  1. Papervision3D の InteractiveSce…

    今まで長々と Papervision3D の InteractiveScene3D について書いてきましたが、結局、私のやりたかった 3D オブジェクトへのフォグ効 (more…)

コメントをどうぞ

Powered by WP Hashcash