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