« Twitterで盛り上がったAS3フレームワーク談義のログまとめ | メイン | 2880pxよりも大きい画像を読み込む方法を発見したよ »

AS3では外部swfを複製できる!

as1やas2では、loadMovieで読み込んだ外部swfをduplicateMovieClipで複製することができませんでしたが、as3ではバイナリを利用すれば複製することができます。


Loaderで読み込む代わりにURLLoaderでバイナリとして読み込んだ後、dataプロパティに格納されているバイナリデータからLoader.loadBytesメソッドを利用してLoaderを再構築します。
これを繰り返せば、その場で複製が可能となります。



private function loadMovie( url:String ):void {
var loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
loader.addEventListener( Event.COMPLETE, onCompleteLoad );
loader.load( new URLRequest( url ) );
}

private function onCompleteLoad( e:Event ):void {
var bytes:ByteArray = URLLoader( e.target ).data;

// 複製その1
var loader1:Loader = new Loader();
loader1.loadBytes( bytes );
addChild( loader1 );

// 複製その2
var loader2:Loader = new Loader();
loader2.loadBytes( bytes );
loader2.x = 100;
addChild( loader2 );
}


バイナリデータを保持しておけばいつでも複製可能になりますが、あくまで読み込んだ直後の状態すなわち外部swfの初期状態からの複製となるので注意が必要です。

もちろんswfだけではなくjpgやpngなどの画像データにも適用ができます。
今のところはBitmapDataとして保持しておいた方が使い勝手がよさそうなので、バイナリで画像データを弄るライブラリが出揃うのを待つといった感じですね。
そっち方面はまだまだ未開拓なので、@flaな人たちに期待。


で、この機能を持ったloadMovieとduplicateMovieClipをAS1MovieClipに盛り込んだら便利そうなので実装してみたいと思います。

トラックバック

このエントリーのトラックバックURL:
http://void.heteml.jp/mt/mt-tb.cgi/45

この一覧は、次のエントリーを参照しています: AS3では外部swfを複製できる!:

» 2880pxよりも大きい画像を読み込む方法を発見したよ from void element blog
FlashPlayerでは2880pxを超えるサイズの画像を読み込んでも、288... [詳しくはこちら]

コメントを投稿

あわせて読みたい