LoaderオブジェクトでaddChild()はダメ
AS3.0をやってみると、予想通り分からないことばかりで、blogネタに困らない今日この頃。こうやってハマった経験を晒すことくらいしか、Flash業界に貢献できないのが悲しいところです。
今日のハマりどころはLoaderオブジェクトです。これは外部のswfや画像ファイルを動的に読み込むためのクラスですね。このクラスはDisplayObjectContainerのサブクラス(つまり子オブジェクトを持てる)で、load()メソッドで読み込まれた外部データは、ロードが完了すると自動的に、Loaderクラスの子オブジェクトとなり、Loader.contentプロパティから参照することもできるようになります。
さて、問題はaddChild()。Loaderオブジェクトの中に、子オブジェクトとしてTextFieldを追加する以下のようなコードをコンパイルすると、「LoaderクラスはaddChildを実装していません」というような趣旨のアラートが表示されてしまいます。DidpalyObjectContainerのサブクラスなのに、addChild()を実装していない?なぜ?
package { import flash.display.Loader; import flash.text.TextField; public class MyLoader extends Loader { public function MyLoader() { var textfield:TextField = new TextField(); textfield.text = "Text"; addChild(textfield); } } }
それもそのはず。ドキュメントにも書いてありましたが、LoaderオブジェクトはaddChild()、addChildAt()、removeChild()、removeChildAt()、および setChildIndex() といったメソッドを(使用できないように?)オーバーライドしているとのことなのです。そして、子オブジェクトとして持てるのは、load()で読み込むオブジェクト1つだけだったのです。
僕から言わせれば、コイツはせっかく親から譲り受けた才能を台無しにしてしまうような親不孝息子にしか見えないのですが、まぁ僕も他人様のことをとやかく言えるほどの人格者ではありませんので、そういう奴なんだと理解してやろうと思います。
さぁ、次はどんな罠にハマるのかなw。