- ベストアンサー
FLASHでのループの設定について
FLASHでアニメーションつくっているんですが、複数のシーンをループの回数をそれぞれ違わせてループさせたいのですが、たとえばシーン1を2回くり返してシーン2に移り、シーン2を3回くり返えすというループをつくる場合どのようなアクションの設定をしたらよいのでしょうか。マニュアルみてもよく理解できませんでした。どなたかよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
度々登場しています、DPEです ^^; loop_count、というのは私が定義した変数の名前で、Flashに最初からある命令ではありません。(当然ですが、命令のリストには載っていません) 変数の名前と中身は、自分で好きなように決めることができます。 例えば、loop_count ではなく loop_times という名前にしても構いませんし、今回のような数値だけでなく、文字列や、他の変数を含む計算式(この場合は、式の結果が変数に保持される)などを記憶させることもできます。 ノーマルモードから変数を入力するには、「アクション」の中の set variable を使います。スクリプトの編集画面にドラッグすると、名前と値を入力するパネルが表示され、変数の名前と値を設定できるようになります。 (ただし、変数の後に” = ”が自動で入力されてしまうようなので、今回のように++演算子を使う場合などは少々不便ですが) 変数の詳しい使い方は、市販の解説書等を参考にして下さい。
その他の回答 (3)
- DPE
- ベストアンサー率85% (666/776)
#2で回答しました、DPEです。 よくある間違いは、変数名やシーン名の指定ミスです。 Flashのデフォルトのシーン名は、「シーン 1」というように、”シーン”と番号の間に半角のスペースが入っているようです。 エキスパートモードで手動で入力していると、このスペースを見落としがちです。また、デフォルトのシーン名には半角の数字が使われていますが、半角と全角とでは、同じ数字でも違うシーン名とみなされます。 デフォルトのシーン名をお使いでしたら、この点を確認してみて下さい。ノーマルモードに切り替え、リストボックスから選択すると、確実に指定できます。 それから、gotoAndPlay で、フレーム番号を指定せずシーンだけ指定すると、文法上はエラーにはなりませんが、シーンの移動が正常に行われません。この点も、合わせてご確認下さい。 もう1つ考えられるのは、loop_countが正しく機能していない可能性です。 loop_count++; の後に、 trace(loop_count); というアクションを設定して、ムービーをプレビューしてみて下さい。 出力ウィンドウに、 1 2 と表示されれば、ループ回数は正常にカウントされています。 1 や 0だけが延々と表示される場合は、回数が正しく保持されていません。考えられるのは、変数名に誤りがある・何らかの原因でシーン1のフレーム1に戻っている、などです。 (フレーム1では loop_count に0を入れているので、フレーム1に戻るとループの回数がクリアされ、 if 文の条件が常に不成立になるため、いつまでもシーン2が再生されないことになります) else 以下でシーン1のアニメを繰り返す際に、フレーム2ではなく1に戻るようになっていないか、または、先述のようにシーン名の記述に誤りはないか、確認してみて下さい。 ちなみに、traceアクションは用が済んだら削除してもいいのですが、「パブリッシュの設定」で「トレースアクションを省略」にチェックを入れると、パブリッシュの際には出力されなくなります。トラブルの原因探しに便利なアクションですので、上手く利用して下さい。
補足
DPEさん度々の回答有難うございます。ノーマルモードでシーンとフレームを入力し直したらできました。ありがとうございました。あとひとつ質問があるのですが、ノーマルモードではloop_countの命令はリストにないからエキスパートモードで手動でloop_countのスクリプト書いてうまくいかなかったらシーンなどノーマルモードで入力するという手順でやるしかないんですよね。それともノーマルモードでloop_countを入力できるのでしょうか。さがしてもないのですが。しつこくてすいません。よろしくお願いします。
- DPE
- ベストアンサー率85% (666/776)
ループ回数を数えるための変数を用意して、ループするごとに変数の数値を+1し、それが一定数に達したら次のシーンを再生する、という方法はいかがでしょうか。 例えば、シーン1のフレーム1に、 loop_count = 0; というアクションを設定して、loop_countという変数を用意します。この変数で、何回ループしたかを記憶するわけです。最初は1回もループしていないので、初期値として0を入れておきます。 次に、フレーム2からアニメを作り、その最後のフレームに以下のようなアクションを設定します。 // ループ回数を+1する loop_count++; // 2回ループしたらシーン2へ、 // それ以外はシーン1のアニメを再生 if (loop_count == 2) { gotoAndPlay("シーン2",1); } else { gotoAndPlay("シーン1",2); } シーン2でも、これと同様にアクションを設定します。シーン2を3回繰り返したいのであれば、 if (loop_count == 2) の 2 の部分を 3 に変えて下さい。 なお、gotoAndPlayの移動先になっているフレームには、フレームラベルを付けておくと便利です。
補足
ていねいな回答ありがとうございます。さっそくやってみたのですがシーン1がずっとくり返されてシーン2に行きません。スクリプトにエラーはないとのこと。どこか基本的なミスがあるのでしょうか?予想されそうな間違いなどあればお教えください。おねがいします。ちなみにエキスパートモードははじめて使いました。
- marvelous
- ベストアンサー率51% (42/81)
Flashのバージョンがわからないのでアレですが、 ここらへんが参考になるかと思います↓
お礼
参考URLのぞきました。まだわたしのレベルではなんのことやら状態でしたが、今後参考にできればと思います。これから少しずつ勉強してみます。ありがとうございました。
お礼
DPEさん詳しく教えていただいてありがとうございました。難しそうなのでなんとなく踏み込めなかったアクションスクリプトに今回の事で親しみを覚えました。これもDPEさんのおかげです。やさしいアクションスクリプトの入門書からはじめてみようと思います。ありがとうございました。