[AS3]beginBitmapFillでビットマップを中心からリピートする方法

beginBitmapFillでビットマップをタイル状に並べる場合、ビットマップの位置は左上からリピートされます。
でも、中心からリピートさせたい場合もあると思います。
方法としては、リピートの開始位置をbeginBitmapFillの第二引数のmatrixに指定すればオッケーです。

デモはこちら

package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Matrix;
	
	[SWF(width="900", height="600")]
	public class Main extends Sprite {
		
		[Embed(source="asset/bg_line.gif")] private var Image:Class;
		
		private var _circle:Shape;
		private var _bitmapData:BitmapData;
		private var _bitmapW:Number;
		private var _w:Number;
		private var _h:Number;
		
		public function Main() {
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
			
		private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
				
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			//ステージサイズ
			_w = stage.stageWidth;
			_h = stage.stageHeight;
			
			//中心確認用の丸
			_circle = new Shape();
			_circle.graphics.beginFill(0x000000);
			_circle.graphics.drawCircle(0, 0, 10);
			_circle.graphics.endFill();
			addChild(_circle);
			
			var bitmap:Bitmap = new Image();
			_bitmapW = bitmap.width;
			_bitmapData = bitmap.bitmapData;
			
			stage.addEventListener(Event.RESIZE, onResize);
			onResize();
		}
		
		private function draw():void {
			var matrix:Matrix = new Matrix();
			matrix.translate(_w / 2 - _bitmapW / 2 , 0);
			
			graphics.clear();
			graphics.beginBitmapFill(_bitmapData, matrix, true);
			graphics.drawRect(0, 0, _w, _h);
			graphics.endFill();
			
			_circle.x = _w / 2;
			_circle.y = _h / 2;
		}

		private function onResize(e:Event = null):void {
			_w = stage.stageWidth;
			_h = stage.stageHeight;
			
			draw();
		}
	}
}

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Post Navigation