• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ロールオーバー時、特定区間だけループさせる)

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

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

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

  • ベストアンサー
  • 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ではどういったコードになるのかご教示頂けないでしょうか?