
ちょっとめんどくさいかつ、忘れがちなので一応メモ。AS3は楽なんだけどねぇ。
というか、クラスにしました。image_mcに読み込んだBitmapDataをdrawして、ターゲットのムービークリップにスムージングをかけてアタッチする、という感じ。
LoadBitmap.as
import flash.display.BitmapData;
class LoadBitmap extends AsBroadcaster
{
/*
* 外部のビットマップデータをロードします。
*
* @param target:MovieClip ロードされたビットマップを表示するMovieClip
* @param url:String URL
* @param smoothing:Boolean スムージングするか否か
*
* このインスタンスにaddListener(オブジェクト)すると、引数に指定したオブジェクトはonCompleteイベントを受け取ります。
*/
public function LoadBitmap(target:MovieClip, url:String, smoothing:Boolean)
{
var image_mc:MovieClip = target.createEmptyMovieClip("image_mc", target.getNextHighestDepth());
var image_listener:Object = new Object();
var _this:LoadBitmap = this;
initialize(this);
image_listener.onLoadInit = function(targetmc:MovieClip)
{
targetmc._visible = false;
var bmd:BitmapData = new BitmapData(targetmc._width, targetmc._height, true, 0x000000);
target.attachBitmap(bmd, target.getNextHighestDepth(), "auto", smoothing);
bmd.draw(targetmc);
_this.broadcastMessage("onComplete");
}
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(image_listener);
loader.loadClip(url, image_mc);
}
}
使い方はこんな感じ。
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
var lbm:LoadBitmap = new LoadBitmap(mc, "test.jpg", true);
lbm.addListener(this);
function onComplete():Void
{
mc._xscale = mc._yscale = 200;
}
LoadBitmapクラスは、AsBroadcasterを継承しているので、newで作ったインスタンスにaddListener()すると、引数に指定したオブジェクト(スコープ)でonCompleteイベントを受け取ることができるので、上の例では、読み込みが終わったらonCompleteを受け取って、mcを縦横2倍に拡大しています。
こういう書き方もAS2はできますよね。
var mc:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
var lbm:LoadBitmap = new LoadBitmap(mc, "test.jpg", true);
var listener_obj:Object = new Object();
lbm.addListener(listener_obj);
listener_obj.onComplete = function()
{
mc._xscale = mc._yscale = 200;
}
ちなみに、大きい画像にスムージングをかけてトランジションするとそこそこ重いので、トランジション中はMovieClip._quality = "LOW"とかにして、終わったら元に戻すとかすると、気が利いてるのかもしれませんね。
----
どうでもいいけど最近ニョロ括弧({})の書き方を、上述のコードのように一段改行するようになってきました。Adobeのコーディングガイドラインや、FlashDevelopの機能のせいでもあるのですが、この書き方の方が、文字や行が密集していないので、ディスプレイに顔を近づけなくてもコードが読みやすいですね。あと、できるだけAS2であってもちゃんと型指定をするっていうのと、変数名(とくに再利用される可能性のあるコード)はあまり省略しない、っていうのを心がけるようにしています。おかげでタイプする文字は多くなるのですが、あとから(たとえば数ヵ月後とかに)再度見たとき、コードが読みやすいですね。

