ステージに合わせたサイズを変更

| comment (0) | trackback (0)

「ステージのリサイズに合わせて位置を変更させる」で紹介した、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);

trackback (0)

trackback URL: http://gelsol.sub.jp/core/mt-tb.cgi/31

Post your comment