Beautifl - Flash Gallery

Thumbnail : 畳が恋しくなったのでASで再現してみた。
畳が恋しくなったのでASで再現してみた。
Hiiragi 2010-01-02 All rights reserved

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

package  
{
	import flash.display.Bitmap;
	import flash.display.Sprite;
	
	/**
	 * 畳が恋しくなったのでASで再現してみた。
	 * @author Hiiragi
	 * 
	 * 下記の「作り方」を参考にしてます。(rsakaneさんのサイト経由)
	 * http://macototo.cool.ne.jp/junics/dark_tatami.html
	 * http://d.hatena.ne.jp/rsakane/20090603/tatami
	 * 
	 * 割とらしくなった気がするけど、立体感があまりないから気持ち悪い・・・。
	 * 
	 * 畳の作成時の幅÷畳の列の数が割り切れない数だと、畳の筋の部分に灰色の線が入るので非推奨。
	 * 
	 * あと、ふちの部分はもう作る気力がないんで、だれか作り方教えてください。(汗
	 * 
	 */
	[SWF(width=465, height=465, frameRate=30, backgroundColor=0xFFFFFF)]
	public class TatamiTest extends Sprite
	{
		
		public function TatamiTest() 
		{
			//幅と畳の列の数が割り切れるような数字にしておかないと筋に灰色の線が入る。
			this.addChild(new Bitmap(new Tatami(500, 500, 20)));
		}
		
	}

}


//畳クラス(BitmapData)
import flash.display.*;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;


class Tatami extends BitmapData
{
	private var _noiseBmpd:BitmapData;
	
	public function Tatami(w:int, h:int, columns:int = 20) 
	{
		//判りやすいように赤色にしてるだけなんで、色は気にしないでください。
		super(w, h, false, 0xFF0000);
		
		//初期化
		_noiseBmpd = new BitmapData(w / columns, h);
		
		//ストライプを作成(1列分)
		var mtx:Matrix = new Matrix();
		mtx.createGradientBox(w/columns, h);
		var stripeSp:Sprite = new Sprite();
		var ratio:Number = 255 / 5;
		stripeSp.graphics.beginGradientFill(GradientType.LINEAR,
											[0xBBBBBB, 0xFFFFFF, 0xFFFFFF, 0xBBBBBB],
											[1, 1, 1, 1],
											[0, ratio * 1, ratio * 4, 255],
											mtx);
		stripeSp.graphics.drawRect(0, 0, w / columns, h);
		stripeSp.graphics.endFill();
		

		
		//for分で左から一列ずつ書いていく
		for (var i:int = 0; i < columns; i++)
		{
			//上で作ったストライプのスプライトを、所定の位置に描く
			this.draw(stripeSp, new Matrix(1, 0, 0, 1, w / columns * i, 0));
			
			//ランダムでノイズを描く
			_noiseBmpd.noise(Math.random() * 1000 >> 0, 0, 255, 7, true);
			//ノイズをブレさせる
			_noiseBmpd.applyFilter(_noiseBmpd, new Rectangle(0, 0, w / columns, h), new Point(0, 0), new BlurFilter(20, 1, 2));
			//ブレたノイズをストライプを描いた場所にBlendMode.MULTIPLYで描く
			this.draw(_noiseBmpd, new Matrix(1, 0, 0, 1, w / columns * i, 0), new ColorTransform(1.6, 1.6, 1.6, 1, -40, -30, -80, 0), BlendMode.MULTIPLY);
		}
		
		//なんとなく全体が混ざったっぽくなった気がするフィルター
		//(いらないかもしれないけど、なかったら「はっきりくっきりのっぺり」で気持ち悪い気もする)
		this.applyFilter(this, new Rectangle(0, 0, w, h), new Point(0, 0), new BlurFilter(1.1, 1.1, 2));
	}
}