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

BitMapをゆらゆらさせよ

ほんのサンプルを見ながらやってみよー
* まだまだよくわからないBitMapを(笑)
* 
* できたーけどちゃんと理解できていない自分がいる。。。
* ちゃんと頭にいれなきゃ。
* 
* 負荷とか考えずにコードを減らしてみました。
* ちょっとはわかりやすくなったかな??
* 
* DisplacementMapFilter
*
Get Adobe Flash player
by umi_kappa 02 Jul 2010
/**
 * Copyright umi_kappa ( http://wonderfl.net/user/umi_kappa )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/oKhZ
 */

/*
 * ほんのサンプルを見ながらやってみよー
 * まだまだよくわからないBitMapを(笑)
 * 
 * できたーけどちゃんと理解できていない自分がいる。。。
 * ちゃんと頭にいれなきゃ。
 * 
 * 負荷とか考えずにコードを減らしてみました。
 * ちょっとはわかりやすくなったかな??
 * 
 * DisplacementMapFilter
 * */

package {
	import flash.display.*;
	import flash.events.*;
	import flash.filters.*;
	import flash.geom.*;
	import flash.net.*;
	import flash.system.*;
	import flash.text.*;
	
    public class test extends Sprite {
		//写真を入れる用
		private var bm:Bitmap;
		private var bmd:BitmapData;
		
		//かけるフィルタよう
		private var translate:int = 0;
		private var dpm_filter:DisplacementMapFilter;
		private var rSeed:Number = 0;
		private var mapBmd:BitmapData;
		
        public function test() {
			//クロスドメイン対策 Wonderflだから必要。
			Security.loadPolicyFile("http://assets.wonderfl.net/crossdomain.xml");
			
            var _urlRequest:URLRequest = new URLRequest("http://assets.wonderfl.net/images/related_images/5/5d/5dca/5dca4e4a21788aaa579fb79f21947efd0b87128d");
			var loader:Loader = new Loader();
			loader.load(_urlRequest);
			
			//ロードできたら・・・
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, load_comp);
        }
		
		
		/*----------------------------------------------------------
		 * ロードできたら
		 * --------------------------------------------------------*/
		private function load_comp(e:Event):void 
		{
			var _loaderInfo:LoaderInfo = e.target as LoaderInfo;
			_loaderInfo.removeEventListener(Event.COMPLETE, load_comp);
			
			bm = _loaderInfo.content as Bitmap;
			bmd = bm.bitmapData as BitmapData;
			//loaderInfo.contentで引っ張ってきたコンテンツにアクセス。
			//addChild(_loaderInfo.content)でもOK
			
			//画像を中央に配置。
			bm.x = stage.stageWidth / 2 - bm.width / 2;
			bm.y = stage.stageHeight / 2 - bm.height / 2;
			addChild(bm);
			
			bm.addEventListener(Event.ENTER_FRAME, onEF);
			
			//フィルタ設定用
			filter_set();
		}
		
		private function filter_set():void
		{
			//フィルタをかける用
			mapBmd = new BitmapData(bm.width,bm.height);
			
			/*
			 * DisplacementMapFilterの設定
			 * */
			dpm_filter = new DisplacementMapFilter();
		//mapBitmap 置き換えマップイメージを示すbmd
			dpm_filter.mapBitmap = mapBmd;
		//mapPoint 左上を基準とした場合の置き換えマップイメージの左上座標を軸に
			dpm_filter.mapPoint = new Point(0, 0);
		//componentX/Y 置き換えに使用するカラーチャンネル 8=alpha
			dpm_filter.componentX = 8;
			dpm_filter.componentY = 8;
		//scaleX/Y 効果を拡大縮小する係数
			dpm_filter.scaleX = 50;
			dpm_filter.scaleY = 50;
		//フィルタのモード
			dpm_filter.mode = DisplacementMapFilterMode.COLOR;
		//範囲外置き換えに使う代替カラー
			dpm_filter.color = 0x000000;
		//範囲外のアルファ
			dpm_filter.alpha = 0;
			
			rSeed = new Date().getTime();
		}
		
		private function onEF(e:Event):void 
		{
			//なみなみさせる関数
			wave();
		}
		
		private function wave():void
		{
			//ぱたぱたするスピード
			translate += 20;
			
			var pt:Point = new Point(translate, 0);
			
			mapBmd.perlinNoise(
				bm.width,
				bm.height,
				2,
				rSeed,
				true,
				true,
				BitmapDataChannel.RED | BitmapDataChannel.BLUE | BitmapDataChannel.GREEN | BitmapDataChannel.ALPHA,
				false,
				[pt, pt]
			);
			
			bm.filters = [dpm_filter];
		}
    }
}