- 2006-12-12 (火)
- action script
先日「Flashで3Dの表現:3Dメニューみたいな」の記事に対して、swfを表示させながら、新規ウィンドウを開くと、swfがマウスカーソル位置がおかしくなって暴走するとのコメントをいただき、その日はMacのFireFox上にて対応できたので一安心していたのですが、昨日「apeirophobia: _xmouse,_ymouse」様のエントリを拝見し、OS・ブラウザごとに_xmouse, _ymouseの挙動の違いがあることを知り、気になったので簡単なサンプルswfを作って確かめてみました。
下のような検証サンプルswfを制作しました。
内容は、onEnterFrameで以下の値を取得&描画しています:
_xmouse, _ymouseの位置は左上基準の座標値で、distanceは矢印の回転軸からマウスまでの距離、degreeは右方向が0°の角度を表します。矢印は方向を示し、lineToで回転軸とマウスカーソルに赤線を描画しています。参考までにソース。
onEnterFrame = function () { //POSITION xpos.text = _root._xmouse; ypos.text = _root._ymouse; //DISTANCE disX = _root._xmouse-arrow._x; disY = _root._ymouse-arrow._y; distance.text = Math.round(Math.sqrt((disX*disX)+(disY*disY))); //ROTATION degree.text = Math.round(Math.atan2(disY, disX)*180/Math.PI); arrow._rotation = degree.text; //LINE this.clear(); this.lineStyle(1, 0xff0000); this.moveTo(arrow._x, arrow._y); this.lineTo(_root._xmouse, _root._ymouse); };
各OS・ブラウザごとの挙動は以下の通り:
- Windows:
- Internet Explorer 7:
同ウィンドウ内、swf表示エリア外では動かず、値はswfからカーソルアウトする直前の値を保持する。エリア外クリックには反応しない。新規ウィンドウを開いても変化なし。想定内の挙動。 - FireFox 2.0:
Internet Explorer 7と同じ挙動。apeirophobia様のように、ブラウザウィンドウ外で(0,0)になることはなかった。バージョンの違いかな?
- Internet Explorer 7:
- MacOSX:
- Safari 2.0.4:
同ウィンドウ内、swf表示エリア外では動かず、値はswfからカーソルアウトする直前の値を保持するが、エリア外クリック時に反応&座標値も取得する。新規ウィンドウを開いた時点では変化ないが、新規ウィンドウ側の上下ブラウザ枠とページ内クリック及びデスクトップのクリックに1度だけ反応する。lineToがおかしくなり、極太赤線表示される時と、矢印が下(89°)を向き、赤線が消える時がある。この時_xmouse, _ymouxe,distance値は5000~何十万と、画面解像度以上の値になる。 - FireFox 1.5.8:
同ウィンドウ内、swf表示エリア外では動かず、値はswfからカーソルアウトする直前の値を保持するが、エリア外クリック時に反応&座標値も取得する。新規ウィンドウを開いた時点では変化ないが、新規ウィンドウ側の上下ブラウザ枠とページ内クリック及びデスクトップのクリックに2度ほど反応する。1度目のクリックは不思議と正確な場合があり、異なるウィンドウ間の距離と角度を取得できてる時もあるし、むちゃくちゃな時もある。2度目のクリックでおかしくなる。この時の座標は新規ウィンドウの位置に関わらず_xmouse, _ymouseが60000+αの値(ウィンドウ内、ブラウザ枠それぞれ固有の値?)となり、結果、角度は45°ぐらいを指す。意味不明。 - Flash-jpの過去の記事にて、MacOSXの、Safari/IE/Firefox/Operaで起こるというご報告をいただきました。(ひろゆき様情報@コメント欄)
- Safari 2.0.4:
- Linux: 持ってません。
いろいろいじってみてください。上記リスト以外のブラウザも、見つけ次第報告します。いろんなブラウザの挙動コメントとかいただけるとありがたいです。
ブラウザ外でも、値がundefinedになるわけではないのですね。とりあえず対応策としては「Flashで3Dの表現:3Dメニューみたいな」でやったように、_xmouse, _ymouseのいずれかの値が、0以下、またはステージサイズ以上の値になったときの例外処理を条件設定しておくのがいいかと思います。
Comment:3
- ひろゆき 2006-12-13 (水) 17:34
-
これは、MacOS 9 のころからあった現象で、
Flash-jp で「_xmouse _ymouse 消える」あたりで検索していただくと、
いくつか例が見つかるかと思います。 - tera 2006-12-13 (水) 18:01
-
>>ひろゆき様
初めまして。以前よりひろゆき様のBlogにて勉強させていただいてます。
教えていただいた情報と、まさに同じ現象のようですね。
MacOSXの、Safari/IE/Firefox/Operaで起こるということで、記事の補足として反映させていただきます。
有益な情報ありがとうございました。今後ともよろしくお願いいたします。 - ひろゆき 2006-12-14 (木) 03:50
-
勉強させていただいているのは、私の方で。
こっそり参考にさせていただいてます。
Trackback:0
- TrackBack URL for this entry
- http://www.trick7.com/blog/mt-tb.cgi/419
- Listed below are links to weblogs that reference
- ブラウザウィンドウと_xmouse, _ymouseの挙動 from trick7.com blog




