- ベストアンサー
AS3.0孫連番MCの処理
Actionscript3.0超初心者です。 トップのフレームにaaaと言うムービークリップがあり、その中にb1,b2,b3・・・・b30と言う連番名ムービークリップがあるとき。 トップフレームから連番ムービークリップをそれぞれ2フレームに移動し停止させたい場合。 b1だけなら MovieClip(aaa.getChildByName("b1")).gotoAndStop(2); で動きました。 この、"b1"部分を for文を使って操作するコードが分かりません。 this["b"+i]のような便利な方法はありますか? どなたか教えて頂けると助かります。 お願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
書かれていらっしゃるスクリプトをなるべく変えない形で書くならは スクリプトは次のようになりますが。。。 for (var i:int = 1; i<=30; i++) { MovieClip(aaa.getChildByName("b" + i)).gotoAndStop(2); } しかし ActionScript 3.0 では インスタンス名を使ってインスタンスを名指ししないのが普通ですから 私なら通常は上のようには書きません。 つまり, > this["b"+i]のような便利な方法はありますか? と書かれていらっしゃいますが 通常はそのような書き方で書きます。 getChildByName などというものは普通使いません。 普通にそのようにしてできませんでしたか↓。 for (var i:int = 1; i<=30; i++) { aaa["b" + i].gotoAndStop(2); } または for (var i:int = 1; i<=30; i++) { this.aaa["b" + i].gotoAndStop(2); } このようにすれば動くはずですよ。 (上記2例も実際にしてみて正常に動いたスクリプトをコピペしています。) ※ gotoAndStop(2) の 2 が全角になっているから エラーになって動作しなかっただけではないでしょうか? (ココに書かれいるスクリプトは全角の2になってます。) 「F-site [AS3] MovieClipインスタンスとインスタンス名」 http://f-site.org/articles/2008/04/19014939.html ~~~ ページ下部付近より引用 ~~~ > 「オーサリング時に配置したMovieClipインスタンス」では、 > タイムラインに予め配置して > [プロパティ]インスペクタで設定したインスタンス名は、 > そのまま変数のように参照として扱うことができました。 > これは、ActionScript 3.0では、 > Flashがインスタンス名と同じ名前の変数を自動的に宣言して、 > そこにインスタンスの参照を格納する > 仕組みになっているからです。 > したがって、やはり変数によりインスタンスを参照するというのが、 > ActionScript 3.0の基本だといえます。 と言うか..., ActionScript 2.0 以下時代からみなさん aaa["b" + i].gotoAndStop(2); というような普通の書き方をされてましたよ。 なぜなら ActionScript 2.0 以下の場合は, インスタンス名で直接インスタンスにアクセスできていましたから そもそも getChildByName など不要でしたし。 とにかくいずれのバージョンにしても getChildByName などというものは よっぽど特殊な場合でない限り普通は使いません。
お礼
BlurFiltanさん、ご指摘の通り >gotoAndStop(2) の 2 が全角になっているから 全角でした。 何というミス!! 恥ずかしいです。 おかけでgetChildByNameは、めったに使用しないことや、this[]の使い方の理解が深まりました。 ありがとうございます。 感謝!