「ステージのリサイズに合わせて位置を変更させる」で紹介した、SetStageCenter.as クラスを変更して、ムービークリップがステージ中央に維持されたままステージにフィットするように拡大縮小されるサンプルです。
FitStage.as
package {
import flash.display.*;
import flash.events.*;
public class FitStage extends Sprite {
private var mc:MovieClip;
private var w:Number;
private var h:Number;
private var dw:Number;
private var dh:Number;
private var ratio:Number = dh / dw;
function FitStage (mc:MovieClip) {
this.mc = mc;
dw = mc.width;
dh = mc.height;
ratio = dh / dw;
w = mc.stage.stageWidth;
h = mc.stage.stageHeight;
fit (w, h);
mc.stage.addEventListener (Event.RESIZE,onStageResize);
}
private function onStageResize (event:Event):void {
w = mc.stage.stageWidth;
h = mc.stage.stageHeight;
fit (w, h);
}
private function fit (w:Number,h:Number):void {
if (w > dw || h > dh) {
if (w * ratio > h) {
mc.width = w;
mc.scaleY = mc.scaleX;
} else {
mc.height = h;
mc.scaleX = mc.scaleY;
}
} else {
mc.width = dw;
mc.height = dh;
}
mc.x = w/2;
mc.y = h/2;
}
}
}
このコードを実行すると、引数で渡した MovieClip クラスのインスタンスがステージサイズが変更される度にステージの中央に移動し、ステージのサイズに合わせて拡大縮小されます。
拡大縮小されるムービークリップの縦横比は維持されます。縦か横の長い辺に合わせて拡大縮小されステージに隙間が空かないようになります。
次のコードで、FitStage クラスを生成します。
FitStage.fla
stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; var myFitStage:FitStage = new FitStage(mc);
Post your comment