Flex: 2005年10月アーカイブ
AS2ではMovieClip(TextField)のインスタンス化は親(AS2以前は_parent、AS3ではparent)がいて始めてできることでした(_rootを除く)。そして後から親を変える(つまり別のMovieClip階層に移動する)ことはできませんでした。
AS3(ActionScript 3.0)では親がいなくても生まれます(インスタンス化)。そして後から親を決められます。さらに親を変えることもできます。
別の言い方をすると、AS2ではインスタンス化されると同時に画面に表示される対象になりますが、
AS3ではインスタンス化後、好きな階層に好きなタイミングでMovieClip(TextField)の出し入れ(画面に表示する対象にするか、しないか)ができます。
出し入れはaddChild()とremoveChild()でおこないます。
これは本当に衝撃的でMovieClipの階層構造の縛りから開放される感じがします。
これができるということは、
Flex Builder 2 alphaをダウンロードして試してます。
とりあえず、Flexの機能は置いておいて、Flash OOPな人にとって気になるAS3(ActionScript 3.0)ですが、知れば知るほど衝撃的です!
AS2は内部的にはAS1と区別がなかったぐらいのもので、
AS1 → AS2は表層的な変化にすぎませんでしたが、
AS2 → AS3は根本的な変化といっても過言じゃないと思います。
今まではFlash Playerのバージョンが上がっても互換性を保つことが優先されて、古い(バグも含む)仕様を引きずってきた部分がありましたが、今回のFlash Player 8.5 + AS3では、より洗練されたものにすることが優先されているように感じます。
ただし互換性も同時に確保する必要はあるので、Flash Player 8.5ではAS3を実行するエンジン(AVM2)とそれ以前のものを実行するエンジン(AVM1)が両方とも搭載されているようです。
さて、AS3は言語体系はより洗練されたものになっているのですが、それを端的に現しているのが次のコードです。
[code]
var my_mc:MovieClip = new MovieClip();
my_mc.x = 10;
my_mc.y = 10;
this.addChild(my_mc);
var my_txt:TextField = new TextField();
my_txt.text = "テキストフィールド";
my_mc.addChild(my_txt);
[/code]
なんと、MovieClipもTextFieldもnewでインスタンス化するんです!
しかもプロパティを設定してから、画面に追加(addChild())できるんです。
これが何かいいかというと、今までMovieClipやTextFieldはOOP的には特殊な扱いをしなければいけませんでしたが、これで普通のクラスと同じ扱いができるということです。
そしてMovieClipの階層構造の縛りからも開放される... これについては後で。
