• 締切済み

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

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

みんなの回答

回答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