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