• 締切済み

FLASHでドラッグしたり…

MacOS9.1でFlashMXを使っています。 今、フレーム1においてドラッグできるMCがあるのですが、1にあるボタンを押してフレーム2に移った時にそのMCのドラッグをさせなくするようにしたいのです。 どのようなスクリプトを書けば良いでしょうか? さっぱり分からないので、ヒントでも良いのでお願いします。

みんなの回答

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

「ある時は可能で、ある時は不可」という処理をするには、変数を使って可否を管理し、if 文でその変数の値を見て処理を決める方法が簡単です。 (このような使い方をする変数を、フラグとも言います) 仮に drag_flg という変数を用意するとします。ドラッグ可能にする時は drag_flg に true を、不可にする場合は false を入れておきます。 普通、ドラッグの処理と言いますと、ムービークリップをクリックした時にドラッグを開始( startDrag(); アクション)、マウスボタンを離された場合にドラッグを終了( stopDrag(); アクション)する、といった処理になるかと思います。 startDrag(); を実行する前に、drag_flg の値を判断します。そして、drag_flg が true の場合だけ、startDrag(); アクションを実行するようにします。 フレーム1ではドラッグが可能ですので、drag_flg は true にしますが、フレーム2ではドラッグ不可ですから、drag_flg を false にします。 例えば、ステージにムービークリップ clip があるとしますと、clip のドラッグを制御するスクリプトは、大体、こんなところになるかと思います。 (↓このスクリプトをコピーして使う場合は、各行頭の全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  ・フレーム1のフレームに設定するアクション   //ドラッグの可否を保持するフラグ   //フレーム1ではドラッグを許可する   drag_flg = true;   //クリックされた場合の処理   clip.onPress = function ()   {    //ドラッグが許可されている時だけ、ドラッグ開始    if( drag_flg == true )    {     this.startDrag();    }   };   //マウスボタンが離された場合の処理   clip.onRelease = function ()   {    //ドラッグを終了する    this.stopDrag();   };   //ムービークリップの外でマウスボタンが離された場合の処理   clip.onReleaseOutside = function ()   {    //ドラッグを終了する    this.stopDrag();   };   //このフレームでムービーを止めておく   stop();  ・フレーム2のフレームに設定するアクション   //フレーム2ではドラッグを禁止する   drag_flg = false;   //手のカーソルに変わらないようにする   clip.useHandCursor = false; 再生されているフレームが1でも2でも、clip 上で onPress イベントが発生すれば、ドラッグの処理が呼び出されます。 この時、ドラッグが許可されているかどうかの判断がないと、無条件でドラッグが開始されてしまいます。そこで、フレーム1ではドラッグを可能に、フレーム2ではドラッグを不可能にフラグの内容を変更し、このフラグを見ることでドラッグの処理をするかしないかを決めるようにしています。 ところで、ドラッグが不可の場合でも、onPress イベントが発生すると、clip の上にカーソルが乗った時、カーソルが手のカーソルに変わります。押しても何も起こらないのに手のカーソルになってしまうのは、少々不自然ではないでしょうか。  clip.useHandCursor = false; というアクションを設定すると、手のカーソルに変わらなくなります。 useHandCursor はいつでも書き換えることができます。もし、フレーム2を再生した後でフレーム1に戻るなどの場合は、フレーム1に  clip.useHandCursor = true; を設定しておくといいでしょう。フレーム1では通常通り手のカーソルになりますが、フレーム2ではカーソルは変わらなくなります。 長くなってすみませんでした。 不明な点がありましたら、補足してください。

noname#236902
質問者

補足

詳しい回答をありがとうございます。 別件で忙しくなってしまいましたので、後日検証してまたお礼なり再度質問なりさせていただきます。 せっかく回答して下さったのにごめんなさい。

関連するQ&A

専門家に質問してみよう