- 締切済み
ステージ外へカーソルが出た事を感知させるには
宜しくお願いします。 FlashMX2004 MacOS:tiger AS1.0 Player6 ステージサイズ100x100ピクセルの上に、80x80ピクセルのMCが配置してあります。 上下左右に10ピクセルの余白がある状態です。 カーソルがステージ外へ出た事を感知したいのですが、カーソルを素早く動かすと、rollOutを感知してくれません。 MCには以下のscriptが書いてあります。 on(rollOver){ trace("over"); } on(rollOut, releaseOutside, dragOut) { trace("out"); } 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- pide_piper
- ベストアンサー率33% (24/72)
NO2です。 先ほどオブジェクトの初期化と書きましたが、 これでは影響範囲が多すぎますので、 オリジナルマウスカーソルを指定位置に戻す方がよいかも。 setInterval(go2House,10000); function go2House(){ with(_level0.curDog_mc){ _x=10; _y=10; } }
- pide_piper
- ベストアンサー率33% (24/72)
現在のマウス座標をダイナミックテキストに書き出すような 簡単なFlashを製作しブラウザで確認してみてください。 ブラウザの中央から、ウィンドウ外へポインタ高速移動すると、 ブラウザの中央付近の座標が表示されたままになると思います。 この事からも、周囲に何ピクセルの余白を用意しても 効果がない事が想像できます。 rollOut等のイベントハンドリングの精度を上げようと onEnterFrameの代わりにsetInterval(fnc,1)等と 超高速でイベント監視しても難しいと思います。 有効な対策は実装する機能によるかと思いますが、 例えば、rollOver状態がtrueの場合に、 マウス移動量をsetIntervalで一定間隔で監視して、 移動量に変化がないと判断したら イベント無効・オブジェクト初期化(rollOut) する等の対策が必要になってくるのではないかと。
お礼
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)
以前に同じような質問があり、そこでの#2の方の回答が参考になるのではないでしょうか?
お礼
suzukoさん。 コメント有り難うございます。 参考ULRに書かれている対応は、しているのですが、上下左右に設けた10ピクセルの上を通過せずに、ステージ外(html領域)にカーソルが出たときに、Flashがそれを認識してくれないのです。 実際は通過しないと、領域外にカーソルは出られないのですが、マウスを素早く動かして領域外へ出したときに、on(rollOut.....){}が反応してくれません。 Flashとしてこれは仕様だとあきらめるしかないのでしょうか。Javascriptと連携させて対応するしかないのでしょうか。 宜しくお願いします。
お礼
pide piperさま 有り難うございます。 なるほど10秒毎に指定位置にですね。 これで行きますと10秒に一回は必ずrollOut状態に なるわけですね。となると、マウスが動いていても一瞬rollOutになって、 コンテンツがビクッと動く様な気がします。気のせいならいいのですが^^。 一度この方向でも検証してみます。 貴重なアドバイスを有り難うございました。