• ベストアンサー

FLASHで、ボタンの押しっぱなしについて

ステージ上に配置したボタンを押すことでムービークリップを動かすことはできるのですが、ボタンを押しっぱなしにしてる間ムービークリップが移動しつづけるようにするにはどうしたら良いのでしょうか? whileなどを使って色々試してみましたがどうもうまく行きませんでした。 ご存知の方がいましたらゼヒ教えてください。 環境はwin版FLASH MXです。

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

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

ムービークリップイベントの enterFrame イベントは、ムービークリップがステージ上に存在している間、常に発生しています。この点を利用して、次のように考えてみてはいかがでしょう。 ムービークリップの移動の許可/不許可を保持する変数(フラグとも呼ばれます)を1つ用意します。ここでは仮に、move_flg という変数にします。 ムービークリップイベントの enterFrame を利用して、常時この変数を監視します。そして、move_flg が true の時だけ移動の処理を行います。 あとは、ボタンが押された時に move_flg を true に、離された時に false にするよう、ボタンにアクションを設定すれば出来上がりです。ボタン外にカーソルがある時にマウスボタンが離された場合も含めて処理をさせたいのなら、release と releaseOutside イベントを併用してください。 とりあえず、ステージ上に、動かすムービークリップのインスタンス clip と、ボタンのインスタンス button の2つがあるとします。 それから、動かすかどうかのフラグ move_flg は、タイムラインの1フレーム目で定義してあるとします。最初は動かさないので、move_flg には初期値として false を入れておきます。 2つに設定するアクションは、大体こんなところでしょうか。 (↓このスクリプトをコピーして使う場合は、各行の行頭に入っている全角のスペースを、全て半角のスペースかタブに置き換えてください。このまま使うとシンタックスエラーになります)  ・button に設定するアクション    //ボタンが押されている時    on(press)    {     //ムービークリップの移動を許可する     _root.move_flg = true;    }    //ボタンが離された時    on(release , releaseOutside)    {     //ムービークリップの移動を禁止に     _root.move_flg = false;    }  ・clip に設定するアクション    onClipEvent(enterFrame)    {     //移動が許可されている時、移動の処理     if( _root.move_flg )     {      /*以下に移動の処理を書く。ここでは       斜めに移動*/       _x += 5;       _y += 5;     }    } Flash MXからは、ムービークリップでも、ボタンシンボルのように press や release のイベントを検出できるようになりました。ボタンシンボルを使って何か不具合がありましたら、ムービークリップシンボルの onPress や onRelease イベントハンドラを試してみてください。 ただし、イベント発生時に呼ぶ関数を予め定義しておく必要があります。ボタンの on や、従来の onClipEvent とは少し違うので、ご注意を。

mappi_mappi
質問者

お礼

教えていただいた記述で無事成功しました。 フラグを使うところまではわかっていたのですが、onClipEvent(enterFrame)には気づきませんでした。まだonClipEventイベントハンドラ各種の違いがはっきりとわかってないので勉強したいと思います。 ご回答ありがとうございました!

その他の回答 (1)

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.1

イベント駆動の発想をしましょう。 1.目的のムービークリップ フレーム1:stop(); 最終フレーム:gotoAndPlay(2); ステージ上に配置し、インスタンス名をつける(例:mc1) 2.ボタン(タイプはムービークリップ) on(press) { _parent.mc1.play(); } on(release) { _parent.mc1.stop(); } ---------------------------------------- 以上で基本形は完成ですが、まだ不十分です。 マウスダウンでムービー再生中にポインタをボタンの外にずらしてからマウスアップしてみてください。ムービーが停止しないと思います。 解決方法はお分かりでしょうか。簡単な修正で解決するのですが。

mappi_mappi
質問者

お礼

すみません。質問の仕方が悪かったようです。 ムービークリップを動かすというのは_xや_yといったムービークリップそのものを動かすことです。 キーボードのキーで操作するのであればKeyis.Downを用いることでできるのですが、マウスのキーコードは用意されていないので悩んでいるところです。 申し訳ありませんが以上の点の対処法をご存知でしたら再度ご回答いただけると嬉しいです。 ボタンの外にずらしてのマウスアップによる問題の対処法も気になりますね。on(dragout)かon(rollout)、on(releaseoutside)などにmc.stop()を使えば良いのでしょうか?