• 締切済み

ステージ外へカーソルが出た事を感知させるには

宜しくお願いします。 FlashMX2004 MacOS:tiger AS1.0 Player6 ステージサイズ100x100ピクセルの上に、80x80ピクセルのMCが配置してあります。 上下左右に10ピクセルの余白がある状態です。 カーソルがステージ外へ出た事を感知したいのですが、カーソルを素早く動かすと、rollOutを感知してくれません。 MCには以下のscriptが書いてあります。 on(rollOver){ trace("over"); } on(rollOut, releaseOutside, dragOut) { trace("out"); } 宜しくお願いします。

  • Flash
  • 回答数3
  • ありがとう数3

みんなの回答

回答No.3

NO2です。 先ほどオブジェクトの初期化と書きましたが、 これでは影響範囲が多すぎますので、 オリジナルマウスカーソルを指定位置に戻す方がよいかも。 setInterval(go2House,10000); function go2House(){  with(_level0.curDog_mc){   _x=10;   _y=10;  } }

undefined
質問者

お礼

pide piperさま 有り難うございます。 なるほど10秒毎に指定位置にですね。 これで行きますと10秒に一回は必ずrollOut状態に なるわけですね。となると、マウスが動いていても一瞬rollOutになって、 コンテンツがビクッと動く様な気がします。気のせいならいいのですが^^。 一度この方向でも検証してみます。 貴重なアドバイスを有り難うございました。

回答No.2

 現在のマウス座標をダイナミックテキストに書き出すような 簡単なFlashを製作しブラウザで確認してみてください。  ブラウザの中央から、ウィンドウ外へポインタ高速移動すると、 ブラウザの中央付近の座標が表示されたままになると思います。 この事からも、周囲に何ピクセルの余白を用意しても 効果がない事が想像できます。  rollOut等のイベントハンドリングの精度を上げようと onEnterFrameの代わりにsetInterval(fnc,1)等と 超高速でイベント監視しても難しいと思います。  有効な対策は実装する機能によるかと思いますが、 例えば、rollOver状態がtrueの場合に、 マウス移動量をsetIntervalで一定間隔で監視して、 移動量に変化がないと判断したら イベント無効・オブジェクト初期化(rollOut) する等の対策が必要になってくるのではないかと。

undefined
質問者

お礼

pide piperさま コメント有り難うございます。 やはりそれしか無いかもですね。一応、以下のscriptで対応はしているのですが、ボタン(MC)自体にも表示内容がありまして、結局マウスを動かさずに、じーっとその表示内容を見ていると、閉じてしまいます。これ以外となるとFlashのみでは、難しいのかもしれないですね。 有り難うございました。 //▽同じ位置に10秒以上いると コンテンツをdefaultの位置に戻す onMouseMove = function(){ clearInterval(nID); _root.posFlag = true; nID = setInterval(function () { _root.posFlag = false; xDefaultPosition(); clearInterval(nID); }, 10000); }

  • suzuko
  • ベストアンサー率38% (1112/2922)
回答No.1

以前に同じような質問があり、そこでの#2の方の回答が参考になるのではないでしょうか?

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1714898
undefined
質問者

お礼

suzukoさん。 コメント有り難うございます。 参考ULRに書かれている対応は、しているのですが、上下左右に設けた10ピクセルの上を通過せずに、ステージ外(html領域)にカーソルが出たときに、Flashがそれを認識してくれないのです。 実際は通過しないと、領域外にカーソルは出られないのですが、マウスを素早く動かして領域外へ出したときに、on(rollOut.....){}が反応してくれません。 Flashとしてこれは仕様だとあきらめるしかないのでしょうか。Javascriptと連携させて対応するしかないのでしょうか。 宜しくお願いします。

関連するQ&A

  • Flash5でうまく動きません

    今Flash5で何種類かのボタンがあり、それぞれの上にカーソルを持っていくと、 ボタンに応じてそれぞれ違ったムービークリップが、同じ場所に表示される というのを作りたくて,とりあえず一番上のボタンには on (rollOver, dragOver) { setProperty ("ターゲット名", _visible, 1); } on (releaseOutside, rollOut, dragOut) { setProperty ("ターゲット名", _visible, 0); } をつけたら思うように動いたのですが,そのすぐ下のボタンに同じように そのボタン用にターゲット名を書き換えてみると、下のボタンは ムービークリップを表示してくれません。あと7個もボタンあるのに…(-_-;) どうしたら思う通りに動くようになるのか、どうか教えてください。

  • ボタンrolloverで画像を変えたいのですが。

    ステージには3個のボタンと4つのMCがあります。 基本となるMCを「MC1」とします。 動画のスタート時は3個のボタンと「MC1」だけが画面に見えています。 3個それぞれのボタンをrolloverでそれぞれに対応する3つのMCに変わり、各ボタンがrolloutした時には、「MC1」に戻る。と、いうアクションスクリプトを書きたいのですが、rolloutした時にどうしても「MC1」に戻ることができません。 on(rollOver){ _root.xxx._visible=true; } on(rollOut){ _root.xxx._visible=false; _root.MC1._visible=true; } 以上をボタンのアクションにそれぞれ書いたのですが、 動きませんでした。 Flash初心者で本で調べたり、ネットでかなり調べたのですが アクションスクリプトの基本がわからず、書き方がわからなくなっております。宜しくお願い致します。

    • ベストアンサー
    • Flash
  • ムービークリッププロパティの変更

    こんにちは。 ムービークリップA_mcをロールオーバーした時にムービークリップB_mcを表示ロールアウトした時にムービークリップB_mcを非表示にしたいのです。 まずはムービークリップB_mcの_alphaを100にするスクリプトを記述しようとしています。 B_mcはアニメーションですでに_alpha=0でステージにおかれています。 A_mcに on(rollOver){ _root.B_mc._alpha=100; } on(rollOut){ _root.B_mc._alpha=0; } と記述したのですが、表示されませんでした。 試しにと on(rollOver){ _root.B_mc._visible=true; } on(rollOut){ _root.B_mc._visible=false; } としてもだめでした・・・ すみません。原因がよくわからず対処方法もわかりません・・・何方かご教授頂けないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • マウスポインタを変化させない方法

    50も半ば過ぎの初心者です。 Flash8で、jpg画像の上にムービークリップ及びボタンを配置、   on (rollOver) { gotoAndPlay("s1"); } on (releaseOutside, rollOut) { gotoAndPlay("s2"); } で、画像へのマウスポインタの乗り降りでムービークリップの制御をしました。 このとき、画像にマウスポインタが乗ると形状がデフォルトの"矢印"から"手"に変りますが、これをデフォルトのまま変化させない方法を教えてください。 on (rollOver) { Mouse.hide(); gotoAndPlay("s1"); } on (releaseOutside, rollOut) { Mouse.show(); gotoAndPlay("s2"); } で、画像にマウスポインタが乗ると消えるようにはできたのですが、クリックしても何も起こらない"ボタン"なので、"矢印"のままにしておきたいのです。 よろしくご指導ください。

    • ベストアンサー
    • Flash
  • MCの座標の変更

    Flash のステージ上に1~5のボタン(btn01~btn05)を作成しました。 on(rollOver){ } と on(rollOut){ } のスクリプトで 5つの「btn」上にマウスが出入する度に同一フォルダー内の「face01.swf~face05.swf」がサムネールのように表示・非表示され、「btn」をクリックすると対応する「face01.html~face05.html」へリンクするように設定いたしました。 on (rollOver) { loadMovieNum("../INDEXTEST/face04.swf", 1); } on (rollOut) { unloadMovieNum(1); } on (release) { getURL("../INDEXTEST/face04.html"); } この際、on(rollOver){ } で表示されるサムネール「face04.swf」の座標がステージの一番左上部となっておりますが、私は画面内の特定の座標に表示したいと考えています。 座標の指定方法を教えていただけませんでしょうか?

    • ベストアンサー
    • Flash
  • rollOverで動きながら出現し、rollOutで逆再生で消えていくメニュー

    rollOverで動きながら出現し、rollOutで逆再生で消えていくメニューを作っています。 MCに下記スクリプトを記述することで再生・逆再生は実現できたのですが、 MC内に複数配置したリンクボタンが機能しません。 リンクはHTMLファイルへのリンクです。 どうすればよろしいでしょうか? 記: onClipEvent (load) { nMove = 0; } onClipEvent (enterFrame) { if (nMove != 0) { nNextFrame = this._currentframe+nMove; if (1<=nNextFrame && nNextFrame<=this._totalframes) { this.gotoAndStop(nNextFrame); } else { nMove = 0; } } } on (rollOver) { nMove = 1; } on (rollOut) { nMove = -1; } MC内に配置しているボタンからは on(release){ getURL("aaa.html"); } といった記述をしています。

    • ベストアンサー
    • Flash
  • FLASH MXでムービークリップをボタンではなくムービークリップ自体で操作できますか?

    いまだにFLASH MXを使っています。 やりたいことはムービークリップを作成し、マウスがそれに触ると停止し、離れると動く、といった感じにしたいのですが、どうにも上手くいきません。 他にボタンを作成しそこにアクションを設定すれば上手く動くのですが ボタンではなく自分自身で操作できないかと思っています。 ボタンのシンボルをムービークリップ(movie)化 それをステージに配置しアクションを設定 アクションイメージ on (rollOver) { movie.stop(); } on (rollOut) { movie.start(); }

  • マウスカーソルに応じたmcのスクロール(ループ型)

    マウスカーソルに応じて、複数配置してるmcがカーソルに合わせてスクロールして、ステージからはみ出したら、はみ出した側のステージの反対から出てくるっていうscriptを作ったのですが、うまくいきません。ループしてくれないんです。 ---- _root ---------------------- menu.mcというのがあり、そのmcの中にmenu01.mc、menu02.mc、menu03.mc・・・という感じでmcが配置してあります。menu.mc自体に別のスクリプト掛けてるので、こういう形にしてます。 ---- _root>menumc ---------------------- menu01.mcなどそれぞれのmenuのmcが入ってます。 さらに、それぞれのmcの中にscroll.mcというのをおき、そのscroll.mcにscriptが書いてあります。 ---- _root>menu.mc>menu01.mc 内scroll.mcのscript------ _visible = false; center = Stage.width/2; halfWidth = _parent._width/2; this.onEnterFrame = function() {  with(_parent){  //Scroll Speed   if (_root._xmouse<=180 || (_root._xmouse>250) && (_root._xmouse<=429)) {    moveX = (center-_root._xmouse)/15;   }else if(_root._xmouse>180 && _root._xmouse<=250){    moveX = 0;   }   _x = _x+moveX;   //Return Scroll   if(_x > Stage.width+halfWidth){    _x -= _width+Stage.width;   }else if(_parent._x < -halfwidth){    _x += _width+Stage.width;   }  } }; --------------------- で、これだときちんと思ったような動きでスクロールはするんですが、ただループしてくれないんです。しかもスクロールする毎にそれぞれのmcの間隔がずれてる気がします。最悪の場合だと、mcの上に別のmcが重なったりしてます。 なぜ、このような現象になってしまうのでしょうか?

  • 外部の画像、もしくはswfを読み込んでボタンをつくりたい

    以下2パターンを試してみました。 1 ボタンシンボルが配置してあるswfファイルを作成(0.swf)し、「sum」というMCに読み込み loadMovie("0.swf","sum"); 結果は、通常状態の表示は問題なく行いましたが、マウスをボタンの上にもってきても反応しませんでした。 (カーソルは変更されるが画像に変化なし) 2 MCをつくり、そこに on (rollOver) { this.gotoAndStop("2"); } on (rollOut) { this.gotoAndStop("1"); } 下の階層に、1フレーム目および2フレーム目に通常状態とrollOverの画像を読み込むためのMCを配置。それぞれsum_1、sum_2。 そのMCがあるタイムライン上に loadMovie("0.jpg","sum.sum_1"); loadMovie("0_on.jpg","sum.sum_2"); 要するに箱を作って、画像だけ差し替えられるようにした感じです。 実行すると、1フレーム目は正常に表示されますが、マウスをかざした時に白くなってしまい、マウスを戻しても白いままで最初の画像が戻りません。 loadMovieはこういう動きなのでしょうか。 外部から読み込んでボタンとして動作させたい場合はどのようにすればいいでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 縮小させる時の基点について

    ActionScriptを勉強中です。分からないことがあるので質問させていただきます。 ステージ上にマスクをかけたムービークリップ(インスタンス名:mc)があり、 そのmcを拡大ボタンと縮小ボタンを使い拡大/縮小できるようにしています。 mcが拡大されている時には、mc自体をドラッグして動かせるようにしています。 レイヤー構造は ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 1、ボタン:拡大ボタンと縮小ボタンを配置 2、マスク ---マスクの対象:mcを配置 3、背景:背景というか枠を書いています ーーーーーーーーーーーーーーーーーーーーーーーーーーーー となっております。 mcにには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (press) { left = Stage.width-this._width/2-2; top = Stage.height-this._height/2-98; right = this._width/2+2; bottom = this._height/2+2; this.startDrag(false, left, top, right, bottom); } on (release, releaseOutside) { this.stopDrag(); } ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 拡大ボタンには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (release) { if (mc._yscale < 300) { mc._xscale = mc._yscale += 100; } else { mc._xscale = mc._yscale = 300; } }ーーーーーーーーーーーーーーーーーーーーーーーーーーーー 縮小ボタンには ーーーーーーーーーーーーーーーーーーーーーーーーーーーー on (release) { if (mc._yscale > 100) { mc._xscale = mc._yscale -= 100; } else { mc._xscale = mc._yscale = 100; } } ーーーーーーーーーーーーーーーーーーーーーーーーーーーー と書いています。 拡大した時の挙動は問題ないのですが、縮小する時の挙動に問題があります。 mcの中心を基点にしているため、端の方でで縮小すると余白が見えてしまいます。 この余白を見せないためにはどうしたら良いのでしょうか? 素人考えでhitTest()を使えば良いのかと思っているのですが、なかなかうまくいきません。 どうしたらよいのかご教示いただけると助かります。よろしくお願いいたします。 制作環境はCS4でAS2.0です。