• ベストアンサー

ボタンをクリック→値を代入→一定の値を超えたら次のフレームへ

 お世話になります。 ボタンのアクションで、仮に変数を"a"とおいて、a==0から始まりボタンをクリックするごとにa = a+1をしていき、最終的にifで、a==10なら次のフレームへ進む。 と言うようなものを作りたいんですが、基本的なこと過ぎるのか調べてもやり方が載っていません。 どなたか御教えください。

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

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

Flash の ActionScript では、”変数 a を使う”といった宣言をしておかなくても  a = 1; とするだけで変数 a を利用できます。  a = a + 1; と、いきなり計算に利用しても文法上は間違いではなく、エラーにもなりません。 ですが、この場合は a の値が不明です。 この計算の結果はどうなると思いますか? ActionScript では、存在しない変数を参照しようとすると undefined (未定義)という値が返されます。 undefined とは内部では 0 のことで、Flash Player 6 (作成ツールは Flash MX )までは、未定義の変数の初期値は 0 として処理されていました。従って上記の例は、Flash Player 6 向けにパブリッシュされた作品であれば、a の値は 0 + 1 = 1 で 1 になります。 ところが、Flash Player 7 (作成ツールは Flash MX 2004 )からは undefined の解釈が変わり、未定義の変数が 0 とは見なされなくなりました。上記のスクリプトを Flash Player 7 向けにパブリッシュした時は、存在しないものに数値を加算することはできないとの意味で、NaN (数値ではないもの)という値になります。 つまり、Flash Player 7 向けのムービーでは、変数を数値や演算に利用する時は先に初期値を入れて、計算に使う前に変数を存在させておく必要があります。 どのプログラミング言語を使ってプログラムを組む時でもそうですが、初期値が不明の変数を信用するのは危険です。 Flash Player 6 までなら、未定義の変数の初期値は確かに 0 と見なされますけれど、たとえ初期値が 0 の変数を使う場合でも、初期値を明示的に入れてから利用する習慣をつけるといいですね。 それで、今回の件ですが。 例えば、フレーム1にボタンがあり、ボタンをクリックする度に a の値を1ずつ増やして、これが 10 になった時にフレーム2に移動する、という場合を考えますと。 今回は変数 a でカウントを取りますから、まずは a に 0 を入れます。 初期化のタイミングは場合にもよりますが、基本的には1回だけでいいので、”スクリプトが1回しか実行されないもの”を利用します。 初期化に使えそうなものは、  ・タイムラインを利用して、フレームアクションを使う  ・ムービークリップの load イベントを利用する などです。 フレームに設定したスクリプトは、再生ヘッドがフレームに来た、その時1度しか実行されません。 今回はムービークリップがありませんから、フレームアクションを使って初期化します。 まず、フレーム1に (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください)  a = 0;  stop(); というスクリプトを書きます。 stop(); でタイムラインが止まっており、フレーム1がずっと表示されてはいますが、a = 0; は1度しか実行されません。 フレーム1にボタンを置いて、クリックされる度に a の値を増やします。 a の値が 10 になったらフレーム2に進むスクリプトは、次のようになります。 このスクリプトはボタンに設定してください。  on(release)  {   //aの値を+1する   a++;   //10になったら次のフレームへ移動   if( a == 10 )   {    gotoAndStop( 2 );   }  } 単純に a を +1 する書き方は正式には a = a + 1; ですが、a++;(インクリメント演算子)という簡略化した書き方もできます。 ちなみに、a = a - 1; の略式として a--; (デクリメント演算子)というのもあります。 どちらも、for 文や何かのカウントを取る場合などによく見かける演算子です。 ボタンの on アクションの中に  trace( a ); というスクリプトを入れておくと、「ムービープレビュー」ではボタンをクリックする度に「出力」パネルが開いて、変数 a の内容が表示されます。 上手くいかなかった場合は、a の中身が undefined や NaN になっていないかどうかを確認してみてください。

7772
質問者

お礼

とてもわかりやすいお答えありがとうございました。 大変参考になりました。

関連するQ&A