Home > action script > ブラウザウィンドウと_xmouse, _ymouseの挙動

ブラウザウィンドウと_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以下、またはステージサイズ以上の値になったときの例外処理を条件設定しておくのがいいかと思います。

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

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

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Remember personal info

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

Home > action script > ブラウザウィンドウと_xmouse, _ymouseの挙動

持っている Flash & ActionScript 関連本の中から、自分的おすすめの読む順番をご紹介。各書籍のレビューは books カテゴリからご覧頂けます。
この順番でどう?(AS3.0)
  • Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)
    Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD付)

    デザイン方面からFlashデビューして、そのままAS2.0を使うようになった人が、難しいと評判のAS3デビューする時の最初の1冊として、とにかく目を通しておくと良いかと思います。プログラミング経験の少ない方でも、サンプルをじっくり読めば、ゼロからのAS3デビュー可。
  • ActionScript 3.0 アニメーション
    ActionScript 3.0 アニメーション
    洋書「Making Things Move!」の日本語訳本。ActionScript3.0で数学的アニメーションを作ることがメインテーマなのですが、前半部分でAS3.0の基礎を分かり易く解説されています。後半の重力, IK, 3D表現等のアニメーション解説も楽しい。僕はこれのAS2.0洋書版を読んでFlashの面白さに気付きました。
  • Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
    この次の辞典のような洋書を読む前の事前知識としてこの本の内容を理解しておくといいかも。
  • Essential ActionScript 3.0 (Essential)
    Essential ActionScript 3.0 (Essential)

    900ページ以上ある相当分厚い本。基礎からOOPまでを解説。ほぼ網羅しているので、これを抑えておけばAS3博士になれそう。
  • Actionscript 3.0 Cookbook
    Actionscript 3.0 Cookbook

    ActionScript3.0のリファレンス本。問題とその解決法が1ページぐらいで細分化されているので空いた時間にちょっとずつ読み進められる。WebでAS3のソースを見て勉強する時の字引としても使う。ただ、時期的に初期の本なので、AS3自体が仕様変更してたりするので正誤表は必読。
  • Object-Oriented Actionscript 3.0
    Object-Oriented Actionscript 3.0

    7/23に発売されたFlash&OOP本。AS2.0版は持っているのだけど、オブジェクト指向の初歩的な解説から入って、後半は僕の理解を超える難度になっていきました。今度こそ理解できるか?
この順番でどう?(AS2.0)
  • Foundation Actionscript Animation: Making Things Move (Foundation)
    Foundation Actionscript Animation: Making Things Move (Foundation)

    スクリプトでアニメーションさせる方法を学べる。プログラムの知識というよりも数学や物理の知識が必要。バネの表現や3D表現など、汎用性の高いテクニックを身に付けられ、個人の表現力をレベルアップするのに最適。参考までに、僕が調べた英単語リスト。2007年4月に、AS3対応版も発売されました。
  • ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers
    ゲーム開発のための数学・物理学入門  Beginning Math and Physics for Game Programmers

    「Making Things Move!」の世界を突き詰めたい人用のステップアップのための本。行列や物理運動、2D/3D表現。Flashの本ではなく、じっくり読むタイプの本なので、あとまわしにしてもいいかも。
  • Flash 8 Essentials
    Flash 8 Essentials

    Flash8の新機能を紹介。全10章が独立した構成で、興味のある部分から読めます。フィルタやビットマップ、ビデオの使い方とかを、基礎から順を追って理解していけるので、ゼロからスクリプティングできるようになる。僕はビットマップ関連の作業の際のリファレンスとして常用しています。
  • .fla―Idea of Flash Creation
    .fla―Idea of Flash Creation

    上の本でFlash8の基本を身に付けて、それをどう面白い表現に落とし込むかを学べます。深津さんの、試行錯誤・実験しやすいスクリプティング、クラス設計に凄さを感じました。YouTubeやFlickrのAPI、PHPとの連携記事も。
  • FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]
    FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]

    ここまでで表現力が付き、テンションが上がるので、その勢いで難解なオブジェクト指向に挑戦。プログラム経験のない人がいきなり英語のOOP本を読むのは厳しい。この本で継承とかインターフェースとかポリモーフィズムとかの用語を理解しておくといいかも。
  • オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―
    オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

    Flashの本ではありませんが、OOPの概念を気軽に読めるボリュームで解説してくれます。英語と日本語のOOP用語の対応を図るためにも「Object-oriented Actionscript for Flash 8」と併読するのがおすすめ。なんとなく読んでおくだけでも結構違うのでは。
  • Object-oriented Actionscript for Flash 8
    Object-oriented Actionscript for Flash 8

    前半はOOPの利便性や基本の紹介。デザインパターンやMVCの理解。13章からグッと難しくなって大変。Flash8対応。
  • Essential Actionscript 2.0
    Essential Actionscript 2.0

    上の本よりもさらにOOPプログラマ向け。同じOOP本ということでやや重複しており、こちらはMX2004時代の本なので見送ってもいいかも。分かりやすい英語で良著。この本のAS3版が出たら間違いなく買い。

Page Top