• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Flashスクリプトでの質問)

Flashスクリプトでの質問

このQ&Aのポイント
  • FlashMXを使用して地図を作成しています。地域部分にマウスを当てると地名が表示され、拡大・縮小ボタンで地図の拡大・縮小ができます。しかし、地域部分をクリックするとリンク先に飛んでしまいます。
  • 地図をドラックすることで地図を動かせるようにしていますが、ドラック中にリンク先に飛んでしまう問題が発生しています。
  • 拡大した後に地域選択部分でドラックするとリンク先に飛んでしまうため、どのような対応をすべきか悩んでいます。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

あるムービークリップが、ドラッグされた時は地図を動かし、クリックされた時はリンク先を表示する、ということでしょうか? 要するに、ムービークリップの上でマウスのボタンが押されて離された場合、それがクリックだったのかドラッグだったのかを判別できればいいのだと思います。 クリックはボタンを押して離す動作、ドラッグはボタンを押したままマウスを動かす動作です。 従って、ボタンが押されて離されるまでの間に、マウスが動かされたかどうかが分かれば、クリックかドラッグかを判別できると言えます。 まず、フレームアクションで変数を2つ用意します。1つはボタンが押されたかどうかを、もう1つはマウスが動かされたかどうかを記憶するものです。ここでは仮に、ボタン用を press_flg 、マウス用を drag_flg とします。 MovieClip オブジェクトの onPress を使って、ボタンが押された時に press_flg を true にし、ボタンが押されたという情報を残しておきます。 同じく MovieClip オブジェクトの onMouseMove で、マウスが動かされたかどうかを検出します。MouseMove イベント発生時にボタンが押されていた( press_flg が true )ら、ドラッグであると見なせますので、ドラッグを開始し、drag_flg を true にしてドラッグ中であることを記憶します。 MouseMove イベントは、マウスが動く度に発生するします。その都度ドラッグの開始処理をしていたのでは正常にドラッグできませんから、ドラッグを開始した直後( press_flg が true で、drag_flg が false の時)に1度だけ、ドラッグの開始処理 を行います。 ボタンが離された時点で、drag_flg が true であればドラッグ、false のままならクリックだったと判断できます。後は、drag_flg が false だった時だけ、リンク先を表示すれば完成です。 このような考え方でスクリプトを組むと、大体、こんな感じになります。ムービークリップはとりあえず、clip という名前にしてあります。 Flash MX からはムービークリップをボタンのように使えるようになりましたが、イベント発生時に呼ぶ関数を、予めフレームアクションで定義しておくスタイルになりました。以下のアクションはインスタンスにではなく、フレームに設定します。 (↓このスクリプトをコピーして利用する場合は、各行の行頭に入っている全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)   //フラグの定義と初期化   press_flg = false;   drag_flg = false;   clip.onPress = function ()   {    //ボタンが押されたことを記憶    press_flg = true;   };   clip.onMouseMove = function ()   {    //ボタンが押されていた場合のみ、1度だけドラッグの開始処理    if ( press_flg && ( ! drag_flg ) )    {     //ドラッグ開始     this.startDrag();     //ドラッグ中であることを記憶     drag_flg = true;    }   };   clip.onRelease = function ()   {    //ドラッグだった場合:ドラッグを終了    if ( drag_flg )    {     this.stopDrag();    }    //クリックだった場合:リンク先を表示    else    {     getURL("***.html","_blank");    }    //フラグをクリア    press_flg = false;    drag_flg = false;   }; これだけでは、ムービークリップ外でボタンが離された場合は、ドラッグの終了やクリックの判定が行われません。clip.onReleaseOutside = ・・・として、onRelease と同じ処理を行うよう、定義しておいた方が無難です。 なお、別の考え方として、ボタンが押されてから離されるまでの時間を計測し、短ければクリック、長ければドラッグと見なす方法もあります。 長くなってすみませんでした。

すると、全ての回答が全文表示されます。

関連するQ&A