※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!
wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)
Water Pool forked from: Water Pool
- // forked from wanson's Water Pool
- // write as3 code here..
- package {
- import flash.display.*;
- import flash.events.Event;
- [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]
- public class Program extends Sprite {
- private var demo:Demo;
- public function Program() {
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- demo = new Demo(this);
- }
- public function onEnterFrame(ev:Event):void {
- demo.frame();
- }
- }
- }
- import flash.display.*;
- import flash.events.MouseEvent;
- class Demo {
- private var bmpdata:BitmapData;
- private var field1:Array = [];
- private var field2:Array = [];
- private const SIZEX:int = 100;
- private const SIZEY:int = 100;
- private const FSIZEX:int = SIZEX + 2;
- private const FSIZEY:int = SIZEY + 2;
- private const SCALE:int = 3;
- private var ox:int;
- private var oy:int;
- private const c1:Number = 0.5;
- private const c2:Number = 0.005;
- private const cc:Number = 1 / (1 + c2);
- private var filters:Array;
- public function Demo(screen:Sprite) {
- screen.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
- bmpdata = new BitmapData(SIZEX, SIZEY);
- var mapimg:Bitmap = new Bitmap(bmpdata);
- mapimg.scaleX = mapimg.scaleY = SCALE;
- screen.addChild(mapimg);
- var i:uint;
- var j:uint;
- for (i = 0; i < FSIZEY; ++i) {
- field1.push([]);
- field2.push([]);
- for (j = 0; j < FSIZEX; ++j)
- field1[i][j] = 0.0;
- }
- // initialize
- for (i = 0; i < FSIZEX; i++)
- field1[0][i] = field1[FSIZEY - 1][i] =
- field2[0][i] = field2[FSIZEY - 1][i] = 0.0;
- for (i = 0; i < FSIZEY; i++)
- field1[i][0] = field1[i][FSIZEX - 1] =
- field2[i][0] = field2[i][FSIZEX - 1] = 0.0;
- for (i = 1; i < FSIZEY - 1; ++i)
- for (j = 1; j < FSIZEX - 1; ++j)
- field2[i][j] = field1[i][j]
- + 0.25 * (field1[i+1][j] + field1[i-1][j]
- + field1[i][j+1] + field1[i][j-1] - 4 * field1[i][j]);
- put(50, 50, 300);
- }
- private function onMouseMove(ev:MouseEvent):void {
- put((ev.localX + 1) / SCALE, (ev.localY + 1) / SCALE, 15);
- }
- private function put(px:Number, py:Number, pow:Number):void {
- const r:uint = 10;
- const bx:int = (px - r < 1) ? 1 : px - r;
- const ex:int = (px + r > FSIZEX - 1) ? FSIZEX - 1 : px + r;
- const by:int = (py - r < 1) ? 1 : py - r;
- const ey:int = (py + r > FSIZEY - 1) ? FSIZEY - 1 : py + r;
- for (var y:uint = by; y < ey; ++y) {
- for (var x:uint = bx; x < ex; ++x) {
- const d:Number = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
- if (d < r) {
- var p:Number = pow * Math.cos(Math.PI / 2 * d / r);
- field1[y][x] += p;
- field2[y][x] += p;
- }
- }
- }
- }
- public function frame():void {
- // draw
- var r:uint, g:uint, b:uint, c:uint;
- var x:uint, y:uint;
- var line_c:Array, line_p:Array, line_n:Array;
- bmpdata.lock();
- for (y = 1; y < SIZEY + 1; ++y) {
- line_c = field2[y];
- for (x = 1; x < SIZEX + 1; ++x) {
- c = Math.abs(line_c[x]);
- r = c + 140;
- g = c + 160;
- b = c + 220;
- if (r > 255) r = 255;
- if (g > 255) g = 255;
- if (b > 255) b = 255;
- bmpdata.setPixel(x - 1, y - 1, (r << 16) + (g << 8) + b);
- }
- }
- bmpdata.unlock();
- // step
- for (y = 1; y < FSIZEY - 1; ++y) {
- line_p = field2[y - 1];
- line_c = field2[y];
- line_n = field2[y + 1];
- for (x = 1; x < FSIZEX - 1; ++x) {
- field1[y][x] = (line_c[x] * (2 - 4 * c1)
- - field1[y][x] * (1 - c2)
- + c1 * (line_n[x] + line_p[x]
- + line_c[x + 1] + line_c[x - 1])) * cc;
- }
- }
- // next
- const tmp:Array = field1;
- field1 = field2;
- field2 = tmp;
- }
- }
Water Pool forked from: Water Pool
- // forked from wanson's Water Pool
- // write as3 code here..
- package {
- import flash.display.*;
- import flash.events.Event;
- [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]
- public class Program extends Sprite {
- private var demo:Demo;
- public function Program() {
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- demo = new Demo(this);
- }
- public function onEnterFrame(ev:Event):void {
- demo.frame();
- }
- }
- }
- import flash.display.*;
- import flash.events.MouseEvent;
- class Demo {
- private var bmpdata:BitmapData;
- private var field1:Array = [];
- private var field2:Array = [];
- private const SIZEX:int = 100;
- private const SIZEY:int = 100;
- private const FSIZEX:int = SIZEX + 2;
- private const FSIZEY:int = SIZEY + 2;
- private const SCALE:int = 3;
- private var ox:int;
- private var oy:int;
- private const c1:Number = 0.5;
- private const c2:Number = 0.005;
- private const cc:Number = 1 / (1 + c2);
- private var filters:Array;
- public function Demo(screen:Sprite) {
- screen.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
- bmpdata = new BitmapData(SIZEX, SIZEY);
- var mapimg:Bitmap = new Bitmap(bmpdata);
- mapimg.scaleX = mapimg.scaleY = SCALE;
- screen.addChild(mapimg);
- var i:uint;
- var j:uint;
- for (i = 0; i < FSIZEY; ++i) {
- field1.push([]);
- field2.push([]);
- for (j = 0; j < FSIZEX; ++j)
- field1[i][j] = 0.0;
- }
- // initialize
- for (i = 0; i < FSIZEX; i++)
- field1[0][i] = field1[FSIZEY - 1][i] =
- field2[0][i] = field2[FSIZEY - 1][i] = 0.0;
- for (i = 0; i < FSIZEY; i++)
- field1[i][0] = field1[i][FSIZEX - 1] =
- field2[i][0] = field2[i][FSIZEX - 1] = 0.0;
- for (i = 1; i < FSIZEY - 1; ++i)
- for (j = 1; j < FSIZEX - 1; ++j)
- field2[i][j] = field1[i][j]
- + 0.25 * (field1[i+1][j] + field1[i-1][j]
- + field1[i][j+1] + field1[i][j-1] - 4 * field1[i][j]);
- put(50, 50, 300);
- }
- private function onMouseMove(ev:MouseEvent):void {
- put((ev.localX + 1) / SCALE, (ev.localY + 1) / SCALE, 15);
- }
- private function put(px:Number, py:Number, pow:Number):void {
- const r:uint = 10;
- const bx:int = (px - r < 1) ? 1 : px - r;
- const ex:int = (px + r > FSIZEX - 1) ? FSIZEX - 1 : px + r;
- const by:int = (py - r < 1) ? 1 : py - r;
- const ey:int = (py + r > FSIZEY - 1) ? FSIZEY - 1 : py + r;
- for (var y:uint = by; y < ey; ++y) {
- for (var x:uint = bx; x < ex; ++x) {
- const d:Number = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
- if (d < r) {
- var p:Number = pow * Math.cos(Math.PI / 2 * d / r);
- field1[y][x] += p;
- field2[y][x] += p;
- }
- }
- }
- }
- public function frame():void {
- // draw
- var r:uint, g:uint, b:uint, c:uint;
- var x:uint, y:uint;
- var line_c:Array, line_p:Array, line_n:Array;
- bmpdata.lock();
- for (y = 1; y < SIZEY + 1; ++y) {
- line_c = field2[y];
- for (x = 1; x < SIZEX + 1; ++x) {
- c = Math.abs(line_c[x]);
- r = c + 140;
- g = c + 160;
- b = c + 220;
- if (r > 255) r = 255;
- if (g > 255) g = 255;
- if (b > 255) b = 255;
- bmpdata.setPixel(x - 1, y - 1, (r << 16) + (g << 8) + b);
- }
- }
- bmpdata.unlock();
- // step
- for (y = 1; y < FSIZEY - 1; ++y) {
- line_p = field2[y - 1];
- line_c = field2[y];
- line_n = field2[y + 1];
- for (x = 1; x < FSIZEX - 1; ++x) {
- field1[y][x] = (line_c[x] * (2 - 4 * c1)
- - field1[y][x] * (1 - c2)
- + c1 * (line_n[x] + line_p[x]
- + line_c[x + 1] + line_c[x - 1])) * cc;
- }
- }
- // next
- const tmp:Array = field1;
- field1 = field2;
- field2 = tmp;
- }
- }
Water Pool 水面。画像がゆがむはずだが・・・
- package
- {
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.BitmapDataChannel;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.filters.DisplacementMapFilter;
- import flash.filters.DisplacementMapFilterMode;
- import flash.geom.Matrix;
- import flash.geom.Point;
- import flash.display.Loader;
- import flash.display.LoaderInfo;
- import flash.system.LoaderContext;
- import flash.system.Security;
- import flash.net.URLRequest;
- [SWF(width=800, height=600, backgroundColor=0xAADDFF)]
- /**
- * 水面を作成する。
- * @author SIBA
- */
- public class Main03 extends Sprite
- {
- // ----------------------------
- // 定数
- // ----------------------------
- private const C1:Number = 0.5;
- private const C2:Number = 0.005;
- private const CC:Number = 1 / (1 + C2);
- private const SCALE:int = 10;
- private const FIELD_SIZE_X:int = 800 / SCALE + 2;
- private const FIELD_SIZE_Y:int = 600 / SCALE + 2;
- // ----------------------------
- // メンバ変数
- // ----------------------------
- private var map:Bitmap; // 水面の画像
- private var bitmapData:BitmapData; // 水面のデータ
- private var field1:Array = []; // 前回の水面データ
- private var field2:Array = []; // 現在の水面データ
- private var dmf:DisplacementMapFilter; // 水面のゆがみを作るFilter
- private var woterLayer:Sprite = new Sprite(); // 水面のレイヤ
- private var objectLayer:Sprite = new Sprite(); // オブジェクトのレイヤ
- // ----------------------------
- // 初期化
- // ----------------------------
- public function Main03()
- {
- // レイヤーの配置
- addChild(objectLayer);
- addChild(woterLayer);
- objectLayer.graphics.drawRect(0, 0, 800, 600);
- // 水面の揺らぎを作るためのFilterを作成
- var channel:int = BitmapDataChannel.ALPHA;
- dmf = new DisplacementMapFilter(null, new Point(), channel, channel, 50, 50, DisplacementMapFilterMode.COLOR)
- // 画像の配置
- Security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml");
- var context:LoaderContext = new LoaderContext(true);
- var loader:Loader = new Loader();
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
- loader.load(new URLRequest("http://farm4.static.flickr.com/3180/3115974098_d1b27674ef.jpg?v=0"), context);
- // 水面を表示するための画像を作成
- bitmapData = new BitmapData(FIELD_SIZE_X, FIELD_SIZE_Y, true, 0xFFFFFFFF);
- map = new Bitmap(bitmapData);
- map.scaleX = SCALE;
- map.scaleY = SCALE;
- woterLayer.addChild(map);
- // フィールドの初期化
- for (var i:int=0; i<FIELD_SIZE_X; i++)
- {
- field1[i] = [];
- field2[i] = [];
- for (var j:int=0; j<FIELD_SIZE_Y; j++)
- {
- field1[i][j] = 0.0;
- field2[i][j] = 0.0;
- }
- }
- }
- // ----------------------------
- // 内部メソッド
- // ----------------------------
- /**
- * 波を立てる。
- * @param px 波を立てる位置(x座標)
- * @param py 波を立てる位置(y座標)
- * @param power
- */
- private function put(px:Number, py:Number, power:Number):void
- {
- // 立てる波の情報
- const r:uint = 5;
- const beginX:int = (px - r < 1) ? 1 : px - r;
- const endX:int = (px + r > FIELD_SIZE_X - 1) ? FIELD_SIZE_X - 1 : px + r;
- const beginY:int = (py - r < 1) ? 1 : py - r;
- const endY:int = (py + r > FIELD_SIZE_Y - 1) ? FIELD_SIZE_Y - 1 : py + r;
- // 波の起点を作成
- for (var xx:int=beginX; xx<endX; xx++)
- {
- for (var yy:int=beginY; yy<endY; yy++)
- {
- const d:Number = Point.distance(new Point(px, py), new Point(xx, yy));
- if (d < r)
- {
- var p:Number = power * Math.cos(Math.PI/2 * d/r);
- field1[xx][yy] += p;
- field2[xx][yy] += p;
- }
- }
- }
- }
- // ----------------------------
- // イベント
- // ----------------------------
- private function onComplete(event:Event):void {
- var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo;
- var loader:Loader = loaderInfo.loader;
- var bmp:BitmapData = new BitmapData(loader.width, loader.height, true, 0x00FFFFFF);
- bmp.draw(loader);
- var image:Bitmap = new Bitmap(bmp);
- image.x = 400 - image.width/2;
- image.y = 300 - image.height/2;
- objectLayer.addChild(image);
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
- }
- private function onMouseMove(event:MouseEvent):void
- {
- put(event.stageX/SCALE, event.stageY/SCALE, 15);
- }
- private function onEnterFrame(event:Event):void
- {
- // 初期化
- var xx:int = 0;
- var yy:int = 0;
- // 波を描く
- bitmapData.lock();
- for (xx=1; xx<FIELD_SIZE_X; xx++)
- {
- for (yy=1; yy<FIELD_SIZE_Y; yy++)
- {
- var c:uint = Math.abs(field2[xx][yy]);
- var a:uint = (c + 32 > 255) ? 255 : c + 32;
- var r:uint = (c + 128 > 255) ? 255 : c + 128;
- var g:uint = (c + 160 > 255) ? 255 : c + 160;
- var b:uint = (c + 192 > 255) ? 255 : c + 192;
- bitmapData.setPixel32(xx-1, yy-1, (a << 24) | (r << 16) | (g << 8) | b);
- }
- }
- bitmapData.unlock();
- // 波の動きを計算
- for (xx=1; xx<FIELD_SIZE_X-1; xx++)
- {
- for (yy=1; yy<FIELD_SIZE_Y-1; yy++)
- {
- field1[xx][yy] = (field2[xx][yy] * (2 - 4 * C1) - field1[xx][yy] * (1 - C2)
- + (field2[xx][yy+1] + field2[xx][yy-1]
- + field2[xx-1][yy] + field2[xx+1][yy]) * C1) * CC;
- }
- }
- // 次へ
- const temp:Array = field1;
- field1 = field2;
- field2 = temp;
- // 全体に水面エフェクト
- var tempBmp:BitmapData = new BitmapData(map.width, map.height, true, 0x00FFFFFF);
- var mat:Matrix = new Matrix();
- mat.scale(map.scaleX, map.scaleY);
- tempBmp.draw(map, mat);
- dmf.mapBitmap = tempBmp
- objectLayer.filters = [dmf];
- }
- }
- }
Water Pool forked from: Water Pool
- // forked from Wanson's Water Pool
- // write as3 code here..
- package {
- import flash.display.*;
- import flash.events.Event;
- import flash.net.*;
- import flash.geom.*;
- import flash.filters.*;
- [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="60")]
- public class Program extends Sprite {
- private var demo:Demo;
- private var _screen:Sprite;
- private var _load:Loader;
- private var _filter:DisplacementMapFilter;
- private var _mtx:Matrix;
- public function Program() {
- _load = new Loader();
- _load.load( new URLRequest("http://img.f.hatena.ne.jp/images/fotolife/t/twitter/20081206/20081206164646.jpg") );
- _load.contentLoaderInfo.addEventListener( Event.COMPLETE, loadComplete );
- this.addChild( _load );
- _screen = new Sprite();
- this.addChild( _screen );
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- demo = new Demo(_screen);
- _screen.blendMode = "overlay";
- _filter = new DisplacementMapFilter( null, new Point(0,0), 1, 1, 50, 50 )
- _mtx = new Matrix();
- _mtx.scale( 3, 3 );
- }
- public function onEnterFrame(ev:Event):void {
- demo.frame();
- this.attach();
- }
- public function loadComplete(e:Event):void {
- }
- public function attach():void {
- var bmp:BitmapData = new BitmapData(300,300);
- bmp.draw( demo.bmpdata, _mtx );
- _filter.mapBitmap = bmp;
- _load.filters = [ _filter ];
- }
- }
- }
- import flash.display.*;
- import flash.events.MouseEvent;
- class Demo {
- public var bmpdata:BitmapData;
- private var field1:Array = [];
- private var field2:Array = [];
- private const SIZEX:int = 100;
- private const SIZEY:int = 100;
- private const FSIZEX:int = SIZEX + 2;
- private const FSIZEY:int = SIZEY + 2;
- private const SCALE:int = 3;
- private var ox:int;
- private var oy:int;
- private const c1:Number = 0.5;
- private const c2:Number = 0.005;
- private const cc:Number = 1 / (1 + c2);
- private var filters:Array;
- public function Demo(screen:Sprite) {
- screen.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
- bmpdata = new BitmapData(SIZEX, SIZEY);
- var mapimg:Bitmap = new Bitmap(bmpdata);
- mapimg.scaleX = mapimg.scaleY = SCALE;
- screen.addChild(mapimg);
- var i:uint;
- var j:uint;
- for (i = 0; i < FSIZEY; ++i) {
- field1.push([]);
- field2.push([]);
- for (j = 0; j < FSIZEX; ++j)
- field1[i][j] = 0.0;
- }
- // initialize
- for (i = 0; i < FSIZEX; i++)
- field1[0][i] = field1[FSIZEY - 1][i] =
- field2[0][i] = field2[FSIZEY - 1][i] = 0.0;
- for (i = 0; i < FSIZEY; i++)
- field1[i][0] = field1[i][FSIZEX - 1] =
- field2[i][0] = field2[i][FSIZEX - 1] = 0.0;
- for (i = 1; i < FSIZEY - 1; ++i)
- for (j = 1; j < FSIZEX - 1; ++j)
- field2[i][j] = field1[i][j]
- + 0.25 * (field1[i+1][j] + field1[i-1][j]
- + field1[i][j+1] + field1[i][j-1] - 4 * field1[i][j]);
- put(50, 50, 300);
- }
- private function onMouseMove(ev:MouseEvent):void {
- put((ev.localX + 1) / SCALE, (ev.localY + 1) / SCALE, 15);
- }
- private function put(px:Number, py:Number, pow:Number):void {
- const r:uint = 10;
- const bx:int = (px - r < 1) ? 1 : px - r;
- const ex:int = (px + r > FSIZEX - 1) ? FSIZEX - 1 : px + r;
- const by:int = (py - r < 1) ? 1 : py - r;
- const ey:int = (py + r > FSIZEY - 1) ? FSIZEY - 1 : py + r;
- for (var y:uint = by; y < ey; ++y) {
- for (var x:uint = bx; x < ex; ++x) {
- const d:Number = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
- if (d < r) {
- var p:Number = pow * Math.cos(Math.PI / 2 * d / r);
- field1[y][x] += p;
- field2[y][x] += p;
- }
- }
- }
- }
- public function frame():void {
- // draw
- var r:uint, g:uint, b:uint, c:uint;
- var x:uint, y:uint;
- var line_c:Array, line_p:Array, line_n:Array;
- bmpdata.lock();
- for (y = 1; y < SIZEY + 1; ++y) {
- line_c = field2[y];
- for (x = 1; x < SIZEX + 1; ++x) {
- c = Math.abs(line_c[x]);
- r = c + 140;
- g = c + 160;
- b = c + 220;
- if (r > 255) r = 255;
- if (g > 255) g = 255;
- if (b > 255) b = 255;
- bmpdata.setPixel(x - 1, y - 1, (r << 16) + (g << 8) + b);
- }
- }
- bmpdata.unlock();
- // step
- for (y = 1; y < FSIZEY - 1; ++y) {
- line_p = field2[y - 1];
- line_c = field2[y];
- line_n = field2[y + 1];
- for (x = 1; x < FSIZEX - 1; ++x) {
- field1[y][x] = (line_c[x] * (2 - 4 * c1)
- - field1[y][x] * (1 - c2)
- + c1 * (line_n[x] + line_p[x]
- + line_c[x + 1] + line_c[x - 1])) * cc;
- }
- }
- // next
- const tmp:Array = field1;
- field1 = field2;
- field2 = tmp;
- }
- }
notice: 



