ExPreloader で 読み込み先 SWF ファイルの参照を得る

Progression の 標準的な Preloader(ExPreloader) 内で、読み込み先の index.swf の参照を得たい。

なぜかというと、preload が終わった時点で index.swf を自動再生するのではなく、ExPreloader 自身が index.swf の再生を制御したいから。

flash.display.Loader を使ってみる

最初に考えたのは、ExPreloader を使わずに flash.display.Loader を使うというもの。しかし、失敗。

var loader:Loader = new Loader();
loader.load(new URLRequest("index.swf"));

addChild しないで保持しておくだけだと、エラーが起こる。

TypeError: Error #1009: null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。
at jp.nium.display::DocumentRoot/_enterFrame()

ソースを追って _enterFrame 周りをコメントアウトしても別の場所で同じエラーが出るので諦めた。

ExPreloader 周りを調べる

純粋に ExPreloader がどこで読み込みを行っているか、追ってみた。

ExPreloader は MovieClip のサブクラスであり、Loader を継承していない。ここが重要。ExPreloader は、Loader を継承した ExLoader をコンポジットしている。

private var _loader:ExLoader;
...
_loader = ExLoader( addChild( new ExLoader() ) );

なので、ExPreloader._loader.content で取得できると思いきや、ActionScript 3.0 の private 属性は、

ActionScript 2.0 とは異なり、ActionScript 3.0 の private ではサブクラスへのアクセスも制限されます。さらに、private ではコンパイル時および実行時の両方でアクセスが制限されます。デフォルトでは、同じパッケージにある呼び出し元は変数または関数にアクセスできます。

とのこと。仕方なく public に書き換えて問題解決した。