/**
* Copyright kataribe ( http://wonderfl.net/user/kataribe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/9VUq
*/
package{
import flash.system.LoaderContext;
import flash.display.Shape;
import flash.net.URLRequest;
import flash.display.Loader;
import flash.display.Sprite;
import net.hires.debug.Stats;
import flash.events.Event;
public class FlashTest extends Sprite{
public var bg:Loader = new Loader;
public function FlashTest(){
// write as3 code here..
bg = new Loader();
bg.load(new URLRequest("http://assets.wonderfl.net/images/related_images/1/10/10a5/10a509ff1767f035a8f0bdb3bc4bcf442a692c3d"), new LoaderContext(true));
addChild(bg);
addChild(new 水(0, 200, 465, 265, 200, this));
addChild(new Stats);
}
}
}
import flash.geom.Point
import flash.display.BitmapDataChannel;
import flash.filters.DisplacementMapFilter;
import flash.geom.Rectangle;
import flash.geom.ColorTransform;
import flash.events.Event;
import flash.display.Bitmap;
import flash.geom.Matrix;
import flash.display.DisplayObject;
import flash.display.BitmapData;
import flash.display.Sprite;
class 水 extends Sprite{
protected const OCT_SPEED:uint = 2;
public var w:int; //横の長さ
public var h:int; //縦の長さ
public var back:DisplayObject;
protected var 水面:BitmapData;
protected var noise:BitmapData;
protected var ゆらゆら:DisplacementMapFilter;
public function 水(x:int, y:int, w:int, h:int, d:int, back:DisplayObject){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.back = back; //水面に映る背景
水面 = new BitmapData(w, h);
水面.draw(back, new Matrix(1, 0, 0, -1, -x, back.height-h)); //上下反転して描込み
//filters = [new BlurFilter(2, 2, 1)] //ぼかす
addChild(new Bitmap(水面));
addEventListener(Event.ENTER_FRAME, update);
var map:BitmapData = new BitmapData(w, h>>1); //縦に半分のサイズでノイズを作る
map.perlinNoise(32, 32, 1, 0, false, true, 0x01);
noise = new BitmapData(w, h);
noise.copyPixels(map, map.rect, new Point(0,0)); //上半分に貼り付け
noise.draw(map, new Matrix(1,0,0,-1,0,map.height<<1)); //下にひっくり返して貼り付け、ループできるようにする
ゆらゆら = new DisplacementMapFilter(noise, null, BitmapDataChannel.RED, 0, 16, 0, "ignore");
水面.applyFilter(水面, 水面.rect, new Point(0,0), ゆらゆら);
}
private function update(e:Event):void{
var tmp:BitmapData = new BitmapData(noise.width, OCT_SPEED);
tmp.copyPixels(noise, new Rectangle(0, noise.height-OCT_SPEED-1, noise.width, noise.height), new Point(0,0));
noise.scroll(0, OCT_SPEED);
noise.copyPixels(tmp, tmp.rect, new Point(0,0));
水面.draw(back, new Matrix(1, 0, 0, -1, -x, back.height-h)); //上下反転して描込み
水面.applyFilter(水面, 水面.rect, new Point(0,0), ゆらゆら);
}
}