papervision3Dで作成したオブジェクトにイベントを設定する方法は前回メモったところだけども、そのオブジェクトにブラーフィルタを適用させたいときは「useOwnContainer」プロパティを「true」に変更する


var p:Plane = new Plane(compo, 100, 70, 1, 1);
p.useOwnContainer = true;


しかしこの設定をすると下記のイベントの発動が無くなってしまう。


InteractiveScene3DEvent.OBJECT_CLICK

InteractiveScene3DEvent.OBJECT_DOUBLE_CLICK


特に「OBJECT_CLICK」に関しては結構使用頻度がありそうなだけにショック。


てことでどうすればいいのかネットを探しまくっていたところ、「note.x」さん のブログにて発見。


「papervision3d/view/layer/ViewportLayer.as のコンストラクタに「this.mouseChildren = false」を追加すればオケ。」


と書いてあったので早速チェックしてみました。


//コンストラクタ

public function ViewportLayer(viewport:Viewport3D, do3d:DisplayObject3D, isDynamic:Boolean = false)
{
super();
this.viewport = viewport;
this.displayObject3D = do3d;
this.dynamicLayer = isDynamic;
this.graphicsChannel = this.graphics;

if(isDynamic){
this.filters = do3d.filters;
this.blendMode = do3d.blendMode;
this.alpha = do3d.alpha;
}

if(do3d){
addDisplayObject3D(do3d);
do3d.container = this;
}
this.mouseChildren = false;
init();
}


上記の赤い部分「 this.mouseChildren = false;」の一行を追加するだけで大丈夫でした。


実際試してみたので確かです。


なるほどって思った。