|
サンプルの作成などに使用した ParaDraw のバージョンは Ver.0.3a4, Suzuka のバージョンは Ver. 0.7.3.3 です。
for文 も,if文 同様,Suzuka や ActionScript 特有なものではありませんし,そこらじゅうで説明されていますね。
ですからここでは for文 についての詳しい説明をするのではなく,実用的に Flash で for文 を使う例を紹介します。
基本として,for文は,
for(変数の初期値; 変数の成立範囲; 変数の次の値) { 繰り返すステートメント }
という形で使用されます。
当然,複雑な数値計算処理に用いられることもありますが,Flash の場合は本来の本業がアニメーションです。したがって,複雑な数値計算よりも,スプライトやボタンを一気に操作する場合によく使われます。
また,そのときには [ ] という配列アクセス演算子が使われることが多いです。配列アクセス演算子は,配列変数を扱うときのみではなく,動的にインスタンス名などにアクセスする場合に多く使われます。
配列アクセス演算子を使う頻度は,本当の配列変数を扱うときより多いのではないかと思います。
とりあえずは Flash のサンプルをご覧ください。
もみじの葉っぱはスプライトですが,on (release) {} を書いてボタンの役割もさせています。適当にクリックしてみてください。クリックする度に全ての葉っぱがいっせいに同じ動きをすると思います。
ムービー内のスプライトの階層構造は次のようになっています。
_root
├ leaf0(左から1つめのもみじ)
├ leaf1(左から2つめのもみじ)
├ leaf2(左から3つめのもみじ)
├ leaf3(左から4つめのもみじ)
└ txt_mc(回転 や 透明化 などを書いたテキスト)
左から1つめのもみじスプライトには次のように書いています。
on(release){
// 変数 i が 0〜3 でループ
for(i=0; i<=3; i++){
// 各葉の回転を 10度 加算
_root["leaf"+i]._rotation +=10;
}
}
|
左から2つめのもみじスプライトには次のように書いています。
on(release){
// 変数 i が 0〜3 でループ
for(i=0; i<=3; i++){
// 各葉のアルファを 5 減算
_root["leaf"+i]._alpha -=5;
}
}
|
左から3つめのもみじスプライトには次のように書いています。
on(release){
// 変数 i が 0〜3 でループ
for(i=0; i<=3; i++){
// 各葉の x座標 10px 減算
_root["leaf"+i]._x -=10;
}
// テキストも移動
_root.txt_mc._x -=10;
}
|
_rotation と _alpha と _x の部分が違うだけであとはほとんど同じですね。
このように for文 と 配列アクセス演算子を使うと,短いスクリプトでたくさんのものを操作することができます。
もみじの葉は4枚しかないので,あまり ありがた味 を感じないかもしれませんが,もみじの葉がもっとたくさん,例えば 0〜99 の 100枚あった場合,
for(i=0; i<=3; i++) 変更→ for(i=0; i<=99; i++)
と変えるだけで,一気に 100枚のもみじの葉を操作することが可能となります。
配列アクセス演算子は,インスタンス名(文字列)を [ ] でくくると,1階層のインスタンス名や変数名であると解釈してくれます。
しかし,[ ] は唐突には使えません。前に _root や this などのパスを付けることによって,インスタンスや変数にアクセスするという解釈されます。
左から4つめ,つまり一番右のもみじのスクリプトのようになると,for文 と 配列アクセス演算子の果たす役割がもっと大きくなります。
// このスプライトが登場したとき
onClipEvent(load){
// 変数 i が 0〜3 でループ
for(i=0; i<=3; i++){
// 各葉の x 座標を変数 pos0 〜3 に記録しておく
this["pos"+i] = _root["leaf"+i]._x;
}
}
// このスプライトをクリックしたとき
on(release){
// 変数 i が 0〜3 でループ
for(i=0; i<=3; i++){
// 各葉の回転を 0度 に戻す
_root["leaf"+i]._rotation = 0;
// 各葉のアルファを 100 に戻す
_root["leaf"+i]._alpha = 100;
// 各葉の 座標を元の位置に戻す
_root["leaf"+i]._x = this["pos"+i];
}
// テキストの x座標も元に戻す
_root.txt_mc._x = 0;
}
|
for文 と 配列アクセス演算子がかなり活躍していますね。
最初の onClipEvent(load){ } 内の for文 には,
// 各葉の x 座標を変数 pos0 〜3 に記録しておく
this["pos"+i] = _root["leaf"+i]._x;
と書いてありますが,この ["pos"+i] は配列変数ではありません。pos0,pos1,pos2,pos3 と言う単なる変数です。
このように動的に変数を作成したり,アクセスすることも可能です。
|