In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

テクスチャのタイリング描画

-------------------------------------------------
テクスチャをタイリング描画
 たまに動作しないので何度かリロードしてみてください。
 
-------------------------------------------------
/**
 * Copyright Hakuhin ( http://wonderfl.net/user/Hakuhin )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/yoop
 */

// -------------------------------------------------
//
// テクスチャをタイリング描画
// 
// たまに動作しないので何度かリロードしてみてください。
// 
// -------------------------------------------------
package {
	import flash.events.*;
	import flash.display.*;
	import flash.net.*;
	import flash.text.*;
	import flash.utils.*;
	import flash.system.*;
	import flash.geom.*;

	public class Main extends Sprite {
		public function Main() {


// -------------------------------------------------
// コンストラクタ
// -------------------------------------------------

// 100%表示
stage.scaleMode = StageScaleMode.NO_SCALE;

// 左上
stage.align = StageAlign.TOP_LEFT;
stage.align = "TL";


var bmp_src : BitmapData = null;		// ソース用ビットマップ
var bmp_render : BitmapData = null;	// 出力用ビットマップ

// リソース読み込み開始
load();


// -------------------------------------------------
// 読み込み
// -------------------------------------------------
function load():void{

	// 画像のURL
	var graphic_url:String = "http://actionscript.web.officelive.com/wonderfl/meme.png";

	// ローダー
	var loader_obj : Loader = new Loader();

	// 読み込み開始
	var url : URLRequest = new URLRequest(graphic_url);
	loader_obj.load(url);

	// 読み込み完了時
	var info : LoaderInfo = loader_obj.contentLoaderInfo;
	info.addEventListener (Event.INIT,LoaderInfoInitFunc);
	function LoaderInfoInitFunc (event : Event):void {

		// メモリからインスタンス化
		var loader_memory : Loader = new Loader();
		loader_memory.contentLoaderInfo.addEventListener (Event.COMPLETE,LoaderInfoCompleteFunc);
		function LoaderInfoCompleteFunc (event : Event):void {

			// 画像をビットマップにキャプチャ
			addChild(loader_memory);
			bmp_src = new BitmapData( loader_memory.width , loader_memory.height , true , 0);
			bmp_src.draw(stage);
			removeChild(loader_memory);
			
			// 初期化へ
			init();

		}
		
		// 読み込み開始
		loader_memory.loadBytes(loader_obj.contentLoaderInfo.bytes);

	}

}


// -------------------------------------------------
// 初期化
// -------------------------------------------------
function init():void{

	// ステージサイズ
	var w:uint = stage.stageWidth;
	var h:uint = stage.stageHeight;   
	var w_half:Number = w/2;
	var h_half:Number = h/2;


	// -------------------------------------------------
	// 背面処理
	// -------------------------------------------------
	var sprite_back:Sprite = new Sprite();
	addChild(sprite_back);
	
	var num:int = 200;
	var i:int;
	for(i=0;i<num;i++){
		SpriteCreate();
	}
	
	function SpriteCreate():void{
		var mc:Sprite = new Sprite();
		sprite_back.addChild(mc);

		var bmp:Bitmap	
		bmp = new Bitmap(bmp_src);
		mc.addChild(bmp);
		bmp.x = 0;	bmp.y = 0;
		
		bmp = new Bitmap(bmp_src);
		mc.addChild(bmp);
		bmp.x = w;	bmp.y = 0;
		
		bmp = new Bitmap(bmp_src);
		mc.addChild(bmp);
		bmp.x = 0;	bmp.y = h;
	
		bmp = new Bitmap(bmp_src);
		mc.addChild(bmp);
		bmp.x = w;	bmp.y = h;

		mc.x = Math.random() * w;
		mc.y = Math.random() * h;
		
		var dx:Number = Math.random() * 2 - 1;
		var dy:Number = Math.random() * 2 - 1;
		dx *= 5;
		dy *= 5;

		addEventListener(Event.ENTER_FRAME,function():void{
			
			mc.x += dx;
			mc.y += dy;
			
			if(mc.x < -w_half)		mc.x += w;
			if(mc.y < -h_half)		mc.y += h;
			if(mc.x > w_half)		mc.x -= w;
			if(mc.y > h_half)		mc.y -= h;
		});

	}



	// -------------------------------------------------
	// 前面処理
	// -------------------------------------------------

	// 前面レイヤー
	var sprite_front:Sprite = new Sprite();
	addChild(sprite_front);
		
	// パラメータ
	var rot:Number = -20;	// 角度
	var scale:Number = 10;	// 拡大率
	var mtx:Matrix = new Matrix(1,0,0,1,0,0);	// 描画時のの姿勢

	var mtx_ide:Matrix = new Matrix(1,0,0,1,0,0);		// 行列
	var rect:Rectangle = new Rectangle(0,0,w,h);		// ソース矩形範囲
	var color:ColorTransform = new ColorTransform(1,1,1,1,0,0,0,0);	// ソースカラー
	
	sprite_front.addEventListener(Event.ENTER_FRAME,function():void{
		// 背面レイヤーをビットマップにキャプチャ
		bmp_render = new BitmapData(w,h,true,0xFFFFFFFF);		
		bmp_render.draw(sprite_back,mtx_ide,color,BlendMode.NORMAL,rect);
		
		// 姿勢を回転しつつ縮小する
		rot += 0.05;
		scale *= 0.995;

		// 行列作成
		mtx.identity();
		mtx.translate(-w/2,-h/2);
		mtx.scale(scale,scale);
		mtx.rotate(rot*Math.PI / 180);
		mtx.translate(w/2,h/2);
		
		// テクスチャをタイリング描画
		var g:Graphics = sprite_front.graphics;
		g.clear();
		g.beginBitmapFill ( bmp_render , mtx , true , true );
		g.drawRect ( 0 , 0 , w , h );
		g.endFill();
	});

}



		}
	}
}