こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Flashスクリプトでの質問

FlashMXを使用してある地図を作っています。
その地図は地域部分にマウスをあてると右側に地名が表示されるという物です。
更にそこに拡大・縮小ボタンをつけて地図を拡大・縮小できるようにしました。
更に拡大した時点でその地図をドラックすると地図が動くようになっています。

そこで問題が発生しました。
拡大してドラックするのはよいのですが、地域部分をクリックするとその地域部分で違う場所にリンクで飛ばす状態になっています。
ドラックした後にリンクがはってあるのでリンク先に飛んでいってしまうのです。

ドラックしている時点ではリンク先に飛んで行ってはこまるのですがどうしても拡大を行った後に地域選択部分でドラックするようになってしまうのでどのような対応をするか悩んでいます。

どうかよいアドバイスをいただけないでしょうか?
お願いします。

投稿日時 - 2004-01-11 14:53:31

QNo.748068

すぐに回答ほしいです

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

あるムービークリップが、ドラッグされた時は地図を動かし、クリックされた時はリンク先を表示する、ということでしょうか?

要するに、ムービークリップの上でマウスのボタンが押されて離された場合、それがクリックだったのかドラッグだったのかを判別できればいいのだと思います。
クリックはボタンを押して離す動作、ドラッグはボタンを押したままマウスを動かす動作です。
従って、ボタンが押されて離されるまでの間に、マウスが動かされたかどうかが分かれば、クリックかドラッグかを判別できると言えます。
まず、フレームアクションで変数を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 と同じ処理を行うよう、定義しておいた方が無難です。

なお、別の考え方として、ボタンが押されてから離されるまでの時間を計測し、短ければクリック、長ければドラッグと見なす方法もあります。
長くなってすみませんでした。

投稿日時 - 2004-01-12 16:29:33

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-