ブラウザウィンドウと_xmouse, _ymouseの挙動

先日「Flashで3Dの表現:3Dメニューみたいな」の記事に対して、swfを表示させながら、新規ウィンドウを開くと、swfがマウスカーソル位置がおかしくなって暴走するとのコメントをいただき、その日はMacのFireFox上にて対応できたので一安心していたのですが、昨日「apeirophobia: _xmouse,_ymouse」様のエントリを拝見し、OS・ブラウザごとに_xmouse, _ymouseの挙動の違いがあることを知り、気になったので簡単なサンプルswfを作って確かめてみました。

下のような検証サンプルswfを制作しました。

mousePosition.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)になることはなかった。バージョンの違いかな?
  • 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で起こるというご報告をいただきました。(ひろゆき様情報@コメント欄)
  • Linux: 持ってません。

いろいろいじってみてください。上記リスト以外のブラウザも、見つけ次第報告します。いろんなブラウザの挙動コメントとかいただけるとありがたいです。

ブラウザ外でも、値がundefinedになるわけではないのですね。とりあえず対応策としては「Flashで3Dの表現:3Dメニューみたいな」でやったように、_xmouse, _ymouseのいずれかの値が、0以下、またはステージサイズ以上の値になったときの例外処理を条件設定しておくのがいいかと思います。

このエントリーをはてなブックマークに追加
はてなブックマーク - ブラウザウィンドウと_xmouse, _ymouseの挙動

Comments:3

ひろゆき 06-12-13 (水) 17:34

これは、MacOS 9 のころからあった現象で、
Flash-jp で「_xmouse _ymouse 消える」あたりで検索していただくと、
いくつか例が見つかるかと思います。

tera 06-12-13 (水) 18:01

>>ひろゆき様
初めまして。以前よりひろゆき様のBlogにて勉強させていただいてます。
教えていただいた情報と、まさに同じ現象のようですね。
MacOSXの、Safari/IE/Firefox/Operaで起こるということで、記事の補足として反映させていただきます。
有益な情報ありがとうございました。今後ともよろしくお願いいたします。

ひろゆき 06-12-14 (木) 3:50

勉強させていただいているのは、私の方で。
こっそり参考にさせていただいてます。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://www.trick7.com/blog/2006/12/12-063939.php/trackback
Listed below are links to weblogs that reference
ブラウザウィンドウと_xmouse, _ymouseの挙動 from trick7

Return to page top