FLASHでボタンをロールオーバーした時に特定区間をループさせる方法

このQ&Aのポイント
  • FLASH(CS4)でアニメーションを作成している初心者です。ボタンをロールオーバーした場合に、指定の区間をループさせたいです。
  • ボタンごとに異なる区間をループさせたい場合、指定のフレーム範囲を設定し、その範囲をループ再生するスクリプトを書くことで実現できます。
  • ボタン1は1フレームから100フレームまで、ボタン2は101フレームから200フレームまで、ボタン3は201フレームから300フレームまでをループ再生するように設定してください。
回答を見る
  • ベストアンサー

ロールオーバー時、特定区間だけループさせる

初めて質問させて頂きます。 プログラミング超初心者です。 長年、プログラミングをされてる方には簡単なことだと思いますが、よろしくお願いします。 今、FLASH(CS4)で簡単なアニメーションを作っています。 簡単に説明しますと ・全体で300フレームある ・ボタン3個設置 という状態です。 そして、 1つ目のボタンをロールオーバーしている時は1フレーム目から100フレーム目までをループする。 2つ目のボタンをロールオーバーしている時は101フレーム目から200フレーム目までをループする。 3つ目のボタンをロールオーバーしている時は201フレーム目から300フレーム目までをループする。 ロールアウトすると全体が再生される。 という仕組みを実現させたいのですが、ロールオーバーしたら指定のフレームへ飛ぶというところまでのスクリプトは書けたのですが、ループさせるスクリプトがわからず困っています。 どなたかアドバイスを頂けないでしょうか。

  • Flash
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.2

#1です。 フラグは知識ではなくて変数の利用方法の1つですよ。 知っていても何にもなりません。 変数の使い方を考えるか考えないかです。 つまりいくらフラグに調べても答えなど書いてありませんよ。 また調べなくても#1に使い方は書いています。 > ActionScript3.0ではどういったコードになるのか すみませんが,300フレーム分の図示が難しいので, 図示の都合上,ルールを一部変更させていただきます。 また実際に300フレームも作ると動作検証に時間がかかるだけなので, その意味でもフレームを減らしたルールにします。  1つ目のボタンをロールオーバーしている時    →1フレーム目 から 10フレーム目 までをループ再生  2つ目のボタンをロールオーバーしている時    →11フレーム目 から 21フレーム目 までをループ再生  3つ目のボタンをロールオーバーしている時    → 21フレーム目 から 30フレーム目 までをループ再生  ロールアウトすると全体が再生される このルールで行くとします。 と言ってもフレームを全体的に10分の1にしただけです。 まず, 1つ目のボタンに「my_btn1」 2つ目のボタンに「my_btn2」 3つ目のボタンに「my_btn3」 というインスタンス名を付けたとします。 その場合 フレーム1 のキーフレームには次のように書きます。 ------------------------------------------ // フラグ(広義のフラグ)の宣言 var flag:int; // 「my_btn1」にイベントリスナーを登録(イベント,実行関数) my_btn1.addEventListener(MouseEvent.MOUSE_OVER,changeFlag1); // 関数 changeFlag1 の定義 function changeFlag1(evt:Event):void { // フラグを1にする flag=1; // フレーム1 に行って再生 gotoAndPlay(1); } // 「my_btn2」にイベントリスナーを登録(イベント,実行関数) my_btn2.addEventListener(MouseEvent.MOUSE_OVER,changeFlag2); // 関数 changeFlag2 の定義 function changeFlag2(evt:Event):void { // フラグを2にする flag=2; // フレーム11 に行って再生 gotoAndPlay(11); } // 「my_btn3」にイベントリスナーを登録(イベント,実行関数) my_btn3.addEventListener(MouseEvent.MOUSE_OVER,changeFlag3); // 関数 changeFlag3 の定義 function changeFlag3(evt:Event):void { // フラグを3にする flag=3; // フレーム21 に行って再生 gotoAndPlay(21); } // 「my_btn1」にイベントリスナーを登録(イベント,実行関数) my_btn1.addEventListener(MouseEvent.MOUSE_OUT,changeFlag0); // 「my_btn2」にイベントリスナーを登録(イベント,実行関数) my_btn2.addEventListener(MouseEvent.MOUSE_OUT,changeFlag0); // 「my_btn3」にイベントリスナーを登録(イベント,実行関数) my_btn3.addEventListener(MouseEvent.MOUSE_OUT,changeFlag0); // 関数 changeFlag0 の定義 function changeFlag0(evt:Event):void { // フラグを0にする flag=0; } ------------------------------------------ フレーム10 のキーフレームには次のように書きます。 ----------------------- // もしフラグが1であれば if (flag==1) { // フレーム1 に行って再生 gotoAndPlay(1); } ----------------------- フレーム20 のキーフレームには次のように書きます。 ----------------------- // もしフラグが2であれば if (flag==2) { // フレーム11 に行って再生 gotoAndPlay(11); } ----------------------- フレーム30 のキーフレームには次のように書きます。 ----------------------- // もしフラグが3であれば if (flag==3) { // フレーム21 に行って再生 gotoAndPlay(21); } ----------------------- フレーム数は変えていますが, それ以外は#1で書いた内容通りです。 ※補足 一般的なフラグは通常 1⇔0 または true⇔false など, 「籏が立っているか立っていないか」のようなものを示します。 そういう変数の値をブール値と言います。 一般的なフラグに使うブール値の場合は, var flag:Boolean; のように宣言や定義をします。 ここで使ったフラグはこれではなく, いくつかの数が入るフラグです。 したがってフレーム1の1行目 var flag:int; で整数宣言をしています。 あと,ここではフラグに flag という変数名を使用していますが, 「flag」 自体はActionScript上は何も意味がない言葉です。 何も意味がない上に人間には意味が通じやすいのでこれを使用しています。 (たまに flag や success にスクリプト的意味があると思われる方がいらっしゃって説明に困ることがあります。) 変数名はActionScript上何も意味がない言葉であれば何でもかまいません。 よく見かける(なぜかActionScript以外でよく見かける) hoge, piyo, foo, bar のようなものでも良いですし, flg でも flag1, flag2, flag3 でも良いです。 ただ, play や if や stop など,ActionScript上意味のある言葉や予約語は避けた方が良いでしょう。 タイムライン&ステージ上の様子↓

orasion
質問者

お礼

コード、そしてアドバイスありがとうございます! 初心者の自分でも理解しやすく説明してくださってとても勉強になりました!画像まで用意してくださって本当にありがとうございます。 なんとか問題を解決することができました。 本当にありがとうございました!

その他の回答 (1)

  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

> FLASH(CS4)で簡単なアニメーションを作っています。 それは良いのですが Flash のバージョンが高くなれば高くなるほど, 色々なことができて回答に困るわけです。 CS4 でしたら Flash Player 1 ~ Flash Player 10 まで対応SWF 及び, Flash Lite 1.0~3.x の SWFがパブリッシュできます。 さらに FlashPlayerのバージョンのみではなく ActionScriptも 1.0~3.0 まで自由自在に作成できます。 膨大な場合と膨大な方法があります。 したがって何とも言えません。 Flash Player 4 以上用 SWF をパブリッシュする場合, または Flash Lite 1.0 以上用の SWF をパブリッシュする場合で, ActionScript1.0 以上を使用する場合, フラグみたいなものを用意すれば良いのではないでしょうか。 "フラグみたいなもの" というのは, true か false という「全か無か」という正式なフラグではなく, 1 や 2 や 3 や 4 や… 色々な旗色を持つフラグという意味の広義のフラグのことです。 フレーム100 のキーフレームに, 「もし フラグである変数の値が 1 であれば フレーム1 に戻って再生」 というスクリプトを書いておきます。 フレーム200 のキーフレームに, 「もし フラグである変数の値が 2 であれば フレーム101 に戻って再生」 というスクリプトを書いておきます。 フレーム300 のキーフレームに, 「もし フラグである変数の値が 3 であれば フレーム201 に戻って再生」 というスクリプトを書いておきます。 そして 1つ目のボタンをロールオーバーしたときには, 「フラグを1 にして フレーム1 に行って再生する」ような動作を仕込みます。 また, 1つ目のボタンをロールアウトしたときには, 「フラグを0にする」 ような動作を仕込みます。 2つ目のボタンをロールオーバーしたときには, 「フラグを2 にして フレーム101 に行って再生する」ような動作を仕込みます。 また, 2つ目のボタンをロールアウトしたときには, 「フラグを0にする」 ような動作を仕込みます。 3つ目のボタンをロールオーバーしたときには, 「フラグを3 にして フレーム201 に行って再生する」ような動作を仕込みます。 また, 3つ目のボタンをロールアウトしたときには, 「フラグを0にする」 ような動作を仕込みます。 上のようなしくみを作っておくと もし某かの理由でフレームの再生がフレーム100に達したとします。 そのときフラグが1以外であれば,そのままフレーム101に進みます。 そのときフラグが1であれば,フレーム1に戻ります。 もし某かの理由でフレームの再生がフレーム200に達したとします。 そのときフラグが2以外であれば,そのままフレーム201に進みます。 そのときフラグが2であれば,フレーム101に戻ります。 もし某かの理由でフレームの再生がフレーム300に達したとします。 そのときフラグが3以外であれば,そのままフレーム1に戻ります。 そのときフラグが3であれば,フレーム201に戻ります。 具体的コードは ActionScript のバージョンによって変わるので書けません。

orasion
質問者

お礼

丁寧なアドバイスありがとうございます。 ActionScript のバージョンは3.0です。 フラグについて知識不足だったので、いろいろ調べて、頂いたアドバイスを基にスクリプトを書いてみたのですが、うまくいきませんでした。 申し訳ないのですがActionScript3.0ではどういったコードになるのかご教示頂けないでしょうか?

関連するQ&A

  • FLASH5で、ボタンにロールアウト時にもアニメーションさせたい

    FLASH5を使用しているのですが、ボタンにマウスのロールオーバーで アニメーションを設定することはできますが、ロールアウトしたときにも アニメーションを設定したい場合、どのような方法があるか教えていただきたいです。 今私が作りたいのは「何もないところにロールオーバーするとボタンがゆっくり表示され、 ロールアウトするとゆっくり消える」というものです。 現時点では、私はムービークリップの中にボタンを入れ、最初のフレームで フレームアクションに stop (); を設定し、そこに配置してあるボタン(ここでは、透明なボタン)に on (rollOver) { play (); } で次のフレームに行くようにし、そこでロールオーバー時のアニメーション(ゆっくりボタンが現れる) を作成して、止めたいところでフレームアクションに stop (); を設定し、その停止時に配置してあるボタン(表示されている可視状態)に on (rollOut) { play (); } を設定し、その次のフレームからはロールアウト時のアニメーション(ゆっくりボタンが消える) を作成しています。 これだと、動作はするのですが メニュー等のようにボタン(この場合はボタンを含んだ ムービーですね)を隣接させて複数置いた場合などに on (rollOut) { play (); } のスクリプトがうまく効かず、他のボタンにロールオーバーしているにも関わらず前にロールオーバーした ボタンがそのままの状態(ボタンが消えず表示されたままの状態)で残ってしまいます。 tellTargetとifを使用するのかな?とも考えたのですがよくわからず困っています、、、、 長文で申し訳ないのですが、よろしくお願いします。

  • Flash マウスオーバー時などのアニメーションについて質問があります

    Flash マウスオーバー時などのアニメーションについて質問があります。 こんにちは。Flash初心者です。 使用しているソフトは「Adobe Flash CS4 Proffesional」です。 現在、ボタンを製作しております。 その過程でマウスオーバー時、マウスダウン時等に アニメーションを加えようと思っております。 実際にアニメーションは作成できたのですが、 アニメーションが無限にループしてしまいます。 一度きりのアニメーションにしたいのですが、うまくいきません。 どのような処理を行えばよいか教えていただけますでしょうか? よろしくお願いします。

  • アニメーションするロールオーバーにリンクを張りたい

    http://www.geocities.jp/peperon44/peach.html←の様にアニメーションしてリンク先が出てくるロールオーバーを作っています。 http://www.geocities.jp/peperon44/peach.fla←に作っているファイルを置きましたが 一番上の階層にシンボル化したボタンを置き、その下の階層ですべてのフレームアニメーションをさせていますが、1フレーム目に this.stop(); //マウスカーソルがロールインした this.onRollOver = function() { //ロールオーバー開始 rollover = true; }; //マウスカーソルがロールアウトした this.onRollOut = function() { //ロールオーバー終了 rollover = false; }; //フレームが進む度に実行 this.onEnterFrame = function() { if (rollover) { //次のフレームへ進む(最終フレームでは無視される) this.nextFrame(); } else { //手前のフレームに戻る(先頭フレームでは無視される) this.prevFrame(); } }; を入れ大ボタンから出てくる紹介、名前、名簿をそれぞれフレームアニメーションにさせ、シンボル化させて各オブジェクトに on (release) { getURL("name.html", "_foot"); } を入れていますが、指定のURLにリンクがかかりませんのでボタンに反応してくれません。記述が間違っているのか、スクリプトを書く場所を間違えているのだと思います。 このつくりだと一番上の階層に on (release) { getURL("name.html", "_foot"); } と入れると指定のURLにリンクされますが、それでは3つリンク先を分けられないので大ボタンから3つの文字がアニメーションして出てくる意味がありません。大ボタンから出てくる小ボタンにリンクを張るようにしたいです。 FLASHに関してはまだまだの未熟者ゆえ解らないです。何方かお助け下さい。 環境はWindowsXP ソフトはFLASH8です。

    • ベストアンサー
    • Flash
  • フラッシュ>>action script ボタンロールオーバーで、他のmcの画像がさしかわる方法

    すみません、大変困っています。 いま、action script2.0で Aというボタンをロールオーバーした際に、他のmcの画像がさしかわるスクリプトがわかりませんで困っています。 ソフトは、flash CS3で、scriptは2.0です 細かく説明しますと A:ボタン B:鳥の画像  C:シマウマの画像 1.ボタンAをマウスオーバー 2.鳥がシマウマに変わる 3.ボタンAをロールアウトすると元のBに戻る 大変恐縮ですが、わかるかたがいらっしゃれば教えてください。 よろしくお願いいたします。

  • ボタンにロールオーバーで吹き出し表示

    ボタンにロールオーバーで吹き出し表示 flash初心者です。。 ボタンが数個並んでおり、それぞれにロールオーバーすると、吹き出しで説明画像を表示、マウスが外れたら吹き出しも消える、ということをしたいです。 難しいスクリプトを使わずに出来るだけ単純で分かりやすい方法(gotoandplayくらい)で実現するにはどうしたらよいでしょうか? ネットで調べたりしているのですが、スクリプトだと応用が出来ず… ご存知の方がいらっしゃいましたらどうかお教え願えないでしょうか。

  • オンマウス状態が続いてしまう事はあるの?

    FLASHで作成したメニューなのですが、 マウスが上に乗った時にちょっとしたムービーが流れるボタンを作成しました。 しかし、そのボタンなのですが、マウスを高速で動かしてオンマウスし、すぐにFLASHエリアからはずすと、オンマウスしたままになってしまうのです。 FLASHエリアから出てしまうと、ロールアウトしたと認識してくれないものですかね。 あるいは作り方のせいですかね。 現在は 1フレーム目に 8つのボタンを並べて それぞれマウスが乗ると 2~9フレーム目に飛んでムービーを再生 ロールオーバーしたら1フレームに戻る仕組みになっています。 この作り方がいけないのでしょうか。 何か情報・アドバイスある方お願いします。

  • Flashでswfにした時に生じる“ちらつき”について

    Flash(CS3)で1600×1200のアニメーションを作っています。 1フレーム目から100フレーム目にかけてサークル状のオブジェクトが中心から画面全体まで大きくなっていくというアニメーションを作り(ベクトル画像)、swfで書き出した所、オブジェクトが徐々に大きくなっていくにつれて画面に“ちらつき”が顕著に現れます。 このちらつきを発生させない方法、何かありませんでしょうか?

  • 2回ループさせる、Lingoの書き方

    directorでアニメーションを作っているのですが、Lingoの書き方(?)について質問です。 始めから再生したとき、途中で2回ループして次のフレームへ進む、といったスクリプトは書けますか? というか、そのような方法があったら教えてください。

  • Flashでストップするようにしたい。

    Flashでアニメーションがループする画像を 作っています。 マウスがロールオーバーした際にそのアニメーション がストップするようにしたいのですが、 どのようにアクションを設定したらいいので しょうか? お願いします☆

  • FLASHでのロールオーバーについて

    こんにちは。 FLASHで、メニューボタンにマウスを乗せると別の領域に画像が表示される、というものを作りたいのですが、どうもうまくできません。 今やっている方法はこんな感じです。まずムービークリップで、1フレーム目を空白に、2フレーム目に表示する画像としたものを作り、インスタンス名をinfomationとして配置します。このシンボルの1フレーム目に、勝手に再生されないようstop(); を書いておきます。そしてメニューボタン(これも、アニメーションボタンにしたいのでムービークリップで作っています)に、以下のスクリプトを書きました。 on (rollOver) { with (infomation) { gotoAndStop(2); } } これで再生しますと、マウスをボタンに乗せても画像が表示されません。(ポインタの形状は変わりますので、ボタンとしては認識してくれているようなのですが・・・) この方法で、間違っているところや、あるいは もっとよい方法がありましたら、教えていただけませんでしょうか。 本やネットで調べたのですが、あまりにも初歩的な質問のためか?解決につながるようなものが見つかりませんでした。 どうぞよろしくお願いいたします。

専門家に質問してみよう