Macromedia Flash非公式テクニカルノート for...inループについて
Platform: All 1. for...inはオブジェクトのプロパティを処理 シンタックス 'for...in'アクションは、オブジェクトから順にプロパティを取り出して、その名前を変数に代入します。そのプロパティ名を使って、オブジェクトのプロパティを調べたり、処理を行うことができます。プロパティを調べるには、オブジェクトに対して[]演算子を使い、変数に代入されたプロパティ名をストリングで指定します。たとえば、以下のスクリプトは、そのタイムライン(MovieClip)に設定されたすべてのプロパティ名とプロパティ、プロパティのデータ型の組合わせを、配列として出力ウィンドウに表示します。
for (prop in this) { なお、'for...in'アクションで変数に代入されるプロパティの順序は、規定されていません。また、その順序を指定する方法も提供されてはいません。 2. タイムライン(MovieClip)に定義された変数 'var'アクションでローカル変数を宣言すると、変数値が代入されていなくても、'for...in'アクションでプロパティとして取り出されます。ですから、変数に設定された未入力のテキストボックスを'for...in'アクションで処理できるようにするには、その前に'var'アクションでローカル変数として宣言すればよいでしょう。タイムライン(MovieClip)に設定されたローカル変数は、そのMovieClipが存在する間変数値を保持します。したがって、そのMovieClipのグローバル変数と、基本的に異なるところはありません。
//未入力のテキストボックスを変数としてfor...inアクションで取り出す 3. ボタンインスタンスの扱いに注意 たとえば、以下のスクリプトは、ボタンをクリックしたとき、そのタイムラインに配置されたMovieClipすべての水平座標('_x')を右に10ピクセル移動しようとしたものと通常考えられます。ところが、'for...in'アクションの中でボタンがプロパティとして扱われ、それがボタンのあるタイムライン('this')を参照するために、その座標も移動させてしまいます。 on (release) {for (prop in this) { //タイムラインのすべてのプロパティを取り出す if (typeof this[prop] == "movieclip") { //プロパティがMovieClipであれば //ボタンインスタンスの配置されたタイムラインも参照される this[prop]._x += 10; //水平座標を右に10ピクセル移動 //ボタンのあるタイムラインも右に移動する } } } これを避けるには、'typeof'演算子で"movieclip"かどうかの判定に加えて、そのプロパティがボタンのあるタイムライン('this')を参照していないことをチェックすべきでしょう。
on (release) { _____ 作成者: 野中文雄 © 2001 and beyond Fumio Nonaka All rights reserved. |
|||