2009年11月アーカイブ

ふんふん

2009年11月23日
最近ちょっと更新が滞ってます。
バンドの手伝いとか、手伝いじゃないのとか、色々もさもさしてて。

久しぶりに記事みなおしてみると色々直したいとこがあるなあ。。
とりあえず気になったのは、レンズフレアの記事で
もしかして黒に塗ってる意味ない?とか、
記事ではチャンネルコピーしてるけど
画像そのままコピーしてぼかしてアルファ値調べればいいだけ?とか・・・
負荷はあまり変わらないのかもしれないけどね。
落ち着いたら修正するかもしれません。
ステージ内でマウスを押した(MOUSE_DOWN)ままFlashの領域外までドラッグした時、
そのままではマウスを離したイベント(MOUSE_UP)を検出できないんだけど
マウスがFlash領域から出た時を検出できるEvent.MOUSE_LEAVEを使うと
マウスダウン→領域外までドラッグ→マウスアップのタイミングでもイベントが取れるので
これを利用してボタンの表示を元に戻したりドラッグ処理を停止したりできます。
ただswfをhtmlに埋め込む時にwmodeを指定していると
環境によってはMOUSE_LEAVEイベントが発生しない事があるっぽい。。。

ので、検証用にサンプルを用意してちょっと実験してみました。
全部WindowsXP、FlashPlayer10でテストしてます。ブラウザは4つだけ。

真ん中の黒いボックスがボタンになってて、
マウスを押すとオレンジに、離すと青に変化するようになってます。
「ボタン上でマウスダウン→Flash領域外までドラッグ→マウスを離す」ってやって
オレンジ→青と変われば成功ね。

wmode指定なし


IE8・Firefox3.0・Opera10・Safari4で全部問題なし。

wmode=transparent


Firefox3.0・Opera10・Safari4では領域外ドラッグでMOUSE_LEAVEが効かない。
挙動も色々おかしい気がする。
IE8では領域外(ブラウザ内)でマウスを離すと何故かstageのMOUSE_UPが発生して
その後領域外でマウスを動かすとMOUSE_LEAVEが発生した。
IE8でドラッグしてブラウザの外で離すとすぐにMOUSE_LEAVEが発生。

wmode=opaque


transparentと同じ結果。


結局

MOUSE_LEAVEを判定したい時はwmodeは指定すると駄目って事なのかな。
見にくいけどサンプルのソースはこれです
renderer.clipping = new FrustumClipping(~);
とかやっていると、
カメラを高速で回転した時とかに画面の端でポリゴンが
一瞬カリングされてしまう謎の現象があったんだけど
jp.ferv.blogさんの記事でやっと対処法がわかりました。

FrustumClippingを使うときはCamera3D.targetは使わず
代わりにCamera.lockAt()を使えば解決するようです。

で、これでめでたしめでたしと思いきや何故か上手くいかなくて、
結構長い間フガフガしてたんだけど
BasicViewクラスを使う時に
new BasicView(640, 480, false, false);
って第五引数を省略してたせいで
カメラタイプがデフォルトの"Target"になってしまってて
コンストラクタでcamera.target = DisplayObject3D.ZERO;されてたのが原因だった。。
いつも省略してたから全然気付かなかったよ・・・

new BasicView(640, 480, false, false, CameraType.FREE);
こんな風に第五引数を"Free"にして解決。

2010年2月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28            

最近のコメント