AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


AIRやFLASHなどを表示するのに不便なので、ブログから自作サイトに移転します。

N2-Works移転先

今後はこちらで更新を行っていきます。


Loaderを使用したSWFデータの取得において、widthやheightなどの定義場所が分かりにくいのでメモ。


今回はAVM1Movieではなく、Flash CS4でFlash Player9用でActionScript3.0用でPublishしたAVM2MovieなのでMovieClipにキャストしています。


以下コードです。



// SWFの読込み
var context:LoaderContext = new LoaderContext();
context.allowLoadBytesCodeExecution = true;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, SwfLoaderCompleteHandler);
loader.loadBytes({SWFのバイナリデータ}, context);

function SwfLoaderCompleteHandler(evt:Event) : void
{
    // ロードしたバイナリをMovieClipに変換
    var loader:Loader = evt.target.loader;
    var mc:MovieClip = loader.content as MovieClip;

    // width確認(これでは駄目。結果は0)
    trace(mc.width);

    // width確認(こっちではOK。結果は正しく出力された)
    trace(mc.loaderInfo.width);
}


上記のように、キャストしたインスタンスのプロパティを参照しても値は0のままです。Bitmapをキャストした時にはwidthが挿入されているのに何故?といった感じです。


とりあえずはMovieClipのloaderInfoの中に値は格納されているみたいです。MovieClipもBitmapもDisplayObjectからの継承なので違いはないと思うのですが、なぜMovieClipの場合はloaderInfoの中でしか定義してくれないのでしょうか?


じゃあ自分でwidthに挿入しようと思い、


mc.width = mc.loaderInfo.width;


などとするとMovieClipが表示されなくなりました。どうやらMovieClipは直接widthの値を直接入力して大きさを変更することはできないようです。


mc.scaleXは値が格納されていて、新たに数値を挿入すると反映されますので、大きさを変えたい時はこちらを使用しろということなのでしょう。