※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


FORKED
  1. // forked from wanson's Water Pool
  2. // write as3 code here..
  3. package  {
  4.     import flash.display.*;
  5.     import flash.events.Event;
  6.     [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]
  7.     public class Program extends Sprite {
  8.         private var demo:Demo;
  9.         public function Program() {
  10.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  11.             demo = new Demo(this);
  12.         }
  13.         public function onEnterFrame(ev:Event):void {
  14.             demo.frame();
  15.         }
  16.     }
  17. }
  18. import flash.display.*;
  19. import flash.events.MouseEvent;
  20. class Demo {
  21.     private var bmpdata:BitmapData;
  22.     private var field1:Array = [];
  23.     private var field2:Array = [];
  24.     private const SIZEX:int = 100;
  25.     private const SIZEY:int = 100;
  26.     private const FSIZEX:int = SIZEX + 2;
  27.     private const FSIZEY:int = SIZEY + 2;
  28.     private const SCALE:int = 3;
  29.     private var ox:int;
  30.     private var oy:int;
  31.     private const c1:Number = 0.5;
  32.     private const c2:Number = 0.005;
  33.     private const cc:Number = 1 / (1 + c2);
  34.     private var filters:Array;
  35.     public function Demo(screen:Sprite) {
  36.         screen.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  37.         bmpdata = new BitmapData(SIZEX, SIZEY);
  38.         var mapimg:Bitmap = new Bitmap(bmpdata);
  39.         mapimg.scaleX = mapimg.scaleY = SCALE;
  40.         screen.addChild(mapimg);
  41.         var i:uint;
  42.         var j:uint;
  43.         for (i = 0; i < FSIZEY; ++i) {
  44.             field1.push([]);
  45.             field2.push([]);
  46.             for (j = 0; j < FSIZEX; ++j)
  47.                 field1[i][j] = 0.0;
  48.         }
  49.         // initialize
  50.         for (i = 0; i < FSIZEX; i++)
  51.             field1[0][i] = field1[FSIZEY - 1][i] =
  52.                 field2[0][i] = field2[FSIZEY - 1][i] = 0.0;
  53.         for (i = 0; i < FSIZEY; i++)
  54.             field1[i][0] = field1[i][FSIZEX - 1] =
  55.                 field2[i][0] = field2[i][FSIZEX - 1] = 0.0;
  56.         for (i = 1; i < FSIZEY - 1; ++i)
  57.             for (j = 1; j < FSIZEX - 1; ++j)
  58.                 field2[i][j] = field1[i][j]
  59.                     + 0.25 * (field1[i+1][j] + field1[i-1][j] 
  60.                             + field1[i][j+1] + field1[i][j-1] - 4 * field1[i][j]);
  61.         put(5050300);
  62.     }
  63.     private function onMouseMove(ev:MouseEvent):void {
  64.         put((ev.localX + 1) / SCALE, (ev.localY + 1) / SCALE, 15);
  65.     }
  66.     private function put(px:Number, py:Number, pow:Number):void {
  67.         const r:uint = 10;
  68.         const bx:int = (px - r < 1) ? 1 : px - r;
  69.         const ex:int = (px + r > FSIZEX - 1) ? FSIZEX - 1 : px + r;
  70.         const by:int = (py - r < 1) ? 1 : py - r;
  71.         const ey:int = (py + r > FSIZEY - 1) ? FSIZEY - 1 : py + r;
  72.         for (var y:uint = by; y < ey; ++y) {
  73.             for (var x:uint = bx; x < ex; ++x) {
  74.                 const d:Number = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
  75.                 if (d < r) {
  76.                     var p:Number = pow * Math.cos(Math.PI / 2 * d / r);
  77.                     field1[y][x] += p;
  78.                     field2[y][x] += p;
  79.                 }
  80.             }
  81.         }
  82.     } 
  83.     public function frame():void {
  84.         // draw
  85.         var r:uint, g:uint, b:uint, c:uint;
  86.         var x:uint, y:uint;
  87.         var line_c:Array, line_p:Array, line_n:Array;
  88.         bmpdata.lock();
  89.         for (y = 1; y < SIZEY + 1; ++y) {
  90.             line_c = field2[y];
  91.             for (x = 1; x < SIZEX + 1; ++x) {
  92.                 c = Math.abs(line_c[x]);
  93.                 r = c + 140;
  94.                 g = c + 160;
  95.                 b = c + 220;
  96.                 if (r > 255) r = 255;
  97.                 if (g > 255) g = 255;
  98.                 if (b > 255) b = 255;
  99.                 bmpdata.setPixel(x - 1, y - 1, (r << 16) + (g << 8) + b);
  100.             }
  101.         }
  102.         bmpdata.unlock();
  103.         // step
  104.         for (y = 1; y < FSIZEY - 1; ++y) {
  105.             line_p = field2[y - 1];
  106.             line_c = field2[y];
  107.             line_n = field2[y + 1];
  108.             for (x = 1; x < FSIZEX - 1; ++x) {
  109.                 field1[y][x] = (line_c[x] * (2 - 4 * c1)
  110.                         - field1[y][x] * (1 - c2)
  111.                         + c1 * (line_n[x] + line_p[x] 
  112.                             + line_c[x + 1] + line_c[x - 1])) * cc;
  113.             }
  114.         }
  115.         // next
  116.         const tmp:Array = field1;
  117.         field1 = field2;
  118.         field2 = tmp;
  119.     }
  120. }
noswf
  1. // forked from wanson's Water Pool
  2. // write as3 code here..
  3. package  {
  4.     import flash.display.*;
  5.     import flash.events.Event;
  6.     [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="30")]
  7.     public class Program extends Sprite {
  8.         private var demo:Demo;
  9.         public function Program() {
  10.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  11.             demo = new Demo(this);
  12.         }
  13.         public function onEnterFrame(ev:Event):void {
  14.             demo.frame();
  15.         }
  16.     }
  17. }
  18. import flash.display.*;
  19. import flash.events.MouseEvent;
  20. class Demo {
  21.     private var bmpdata:BitmapData;
  22.     private var field1:Array = [];
  23.     private var field2:Array = [];
  24.     private const SIZEX:int = 100;
  25.     private const SIZEY:int = 100;
  26.     private const FSIZEX:int = SIZEX + 2;
  27.     private const FSIZEY:int = SIZEY + 2;
  28.     private const SCALE:int = 3;
  29.     private var ox:int;
  30.     private var oy:int;
  31.     private const c1:Number = 0.5;
  32.     private const c2:Number = 0.005;
  33.     private const cc:Number = 1 / (1 + c2);
  34.     private var filters:Array;
  35.     public function Demo(screen:Sprite) {
  36.         screen.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  37.         bmpdata = new BitmapData(SIZEX, SIZEY);
  38.         var mapimg:Bitmap = new Bitmap(bmpdata);
  39.         mapimg.scaleX = mapimg.scaleY = SCALE;
  40.         screen.addChild(mapimg);
  41.         var i:uint;
  42.         var j:uint;
  43.         for (i = 0; i < FSIZEY; ++i) {
  44.             field1.push([]);
  45.             field2.push([]);
  46.             for (j = 0; j < FSIZEX; ++j)
  47.                 field1[i][j] = 0.0;
  48.         }
  49.         // initialize
  50.         for (i = 0; i < FSIZEX; i++)
  51.             field1[0][i] = field1[FSIZEY - 1][i] =
  52.                 field2[0][i] = field2[FSIZEY - 1][i] = 0.0;
  53.         for (i = 0; i < FSIZEY; i++)
  54.             field1[i][0] = field1[i][FSIZEX - 1] =
  55.                 field2[i][0] = field2[i][FSIZEX - 1] = 0.0;
  56.         for (i = 1; i < FSIZEY - 1; ++i)
  57.             for (j = 1; j < FSIZEX - 1; ++j)
  58.                 field2[i][j] = field1[i][j]
  59.                     + 0.25 * (field1[i+1][j] + field1[i-1][j] 
  60.                             + field1[i][j+1] + field1[i][j-1] - 4 * field1[i][j]);
  61.         put(5050300);
  62.     }
  63.     private function onMouseMove(ev:MouseEvent):void {
  64.         put((ev.localX + 1) / SCALE, (ev.localY + 1) / SCALE, 15);
  65.     }
  66.     private function put(px:Number, py:Number, pow:Number):void {
  67.         const r:uint = 10;
  68.         const bx:int = (px - r < 1) ? 1 : px - r;
  69.         const ex:int = (px + r > FSIZEX - 1) ? FSIZEX - 1 : px + r;
  70.         const by:int = (py - r < 1) ? 1 : py - r;
  71.         const ey:int = (py + r > FSIZEY - 1) ? FSIZEY - 1 : py + r;
  72.         for (var y:uint = by; y < ey; ++y) {
  73.             for (var x:uint = bx; x < ex; ++x) {
  74.                 const d:Number = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
  75.                 if (d < r) {
  76.                     var p:Number = pow * Math.cos(Math.PI / 2 * d / r);
  77.                     field1[y][x] += p;
  78.                     field2[y][x] += p;
  79.                 }
  80.             }
  81.         }
  82.     } 
  83.     public function frame():void {
  84.         // draw
  85.         var r:uint, g:uint, b:uint, c:uint;
  86.         var x:uint, y:uint;
  87.         var line_c:Array, line_p:Array, line_n:Array;
  88.         bmpdata.lock();
  89.         for (y = 1; y < SIZEY + 1; ++y) {
  90.             line_c = field2[y];
  91.             for (x = 1; x < SIZEX + 1; ++x) {
  92.                 c = Math.abs(line_c[x]);
  93.                 r = c + 140;
  94.                 g = c + 160;
  95.                 b = c + 220;
  96.                 if (r > 255) r = 255;
  97.                 if (g > 255) g = 255;
  98.                 if (b > 255) b = 255;
  99.                 bmpdata.setPixel(x - 1, y - 1, (r << 16) + (g << 8) + b);
  100.             }
  101.         }
  102.         bmpdata.unlock();
  103.         // step
  104.         for (y = 1; y < FSIZEY - 1; ++y) {
  105.             line_p = field2[y - 1];
  106.             line_c = field2[y];
  107.             line_n = field2[y + 1];
  108.             for (x = 1; x < FSIZEX - 1; ++x) {
  109.                 field1[y][x] = (line_c[x] * (2 - 4 * c1)
  110.                         - field1[y][x] * (1 - c2)
  111.                         + c1 * (line_n[x] + line_p[x] 
  112.                             + line_c[x + 1] + line_c[x - 1])) * cc;
  113.             }
  114.         }
  115.         // next
  116.         const tmp:Array = field1;
  117.         field1 = field2;
  118.         field2 = tmp;
  119.     }
  120. }
noswf
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.BitmapData;
  5.     import flash.display.BitmapDataChannel;
  6.     import flash.display.Sprite;
  7.     import flash.events.Event;
  8.     import flash.events.MouseEvent;
  9.     import flash.filters.DisplacementMapFilter;
  10.     import flash.filters.DisplacementMapFilterMode;
  11.     import flash.geom.Matrix;
  12.     import flash.geom.Point;
  13.     import flash.display.Loader;
  14.     import flash.display.LoaderInfo;
  15.     import flash.system.LoaderContext;
  16.     import flash.system.Security;
  17.     import flash.net.URLRequest;
  18.     
  19.     [SWF(width=800, height=600, backgroundColor=0xAADDFF)]
  20.     /**
  21.      * 水面を作成する。
  22.      * @author SIBA
  23.      */
  24.     public class Main03 extends Sprite
  25.     {    
  26.         // ----------------------------
  27.         //    定数
  28.         // ----------------------------
  29.         
  30.         private const C1:Number = 0.5;
  31.         private const C2:Number = 0.005;
  32.         private const CC:Number = 1 / (1 + C2);
  33.         private const SCALE:int = 10;
  34.         private const FIELD_SIZE_X:int = 800 / SCALE + 2;
  35.         private const FIELD_SIZE_Y:int = 600 / SCALE + 2;
  36.         
  37.         
  38.         // ----------------------------
  39.         //    メンバ変数
  40.         // ----------------------------
  41.         
  42.         private var map:Bitmap;                            // 水面の画像
  43.         private var bitmapData:BitmapData;                // 水面のデータ
  44.         private var field1:Array = [];                    // 前回の水面データ
  45.         private var field2:Array = [];                    // 現在の水面データ
  46.         private var dmf:DisplacementMapFilter;            // 水面のゆがみを作るFilter
  47.         private var woterLayer:Sprite = new Sprite();    // 水面のレイヤ
  48.         private var objectLayer:Sprite = new Sprite();    // オブジェクトのレイヤ
  49.         
  50.         
  51.         // ----------------------------
  52.         //    初期化
  53.         // ----------------------------
  54.         
  55.         public function Main03()
  56.         {
  57.             // レイヤーの配置
  58.             addChild(objectLayer);
  59.             addChild(woterLayer);
  60.             objectLayer.graphics.drawRect(00800600);
  61.             
  62.             // 水面の揺らぎを作るためのFilterを作成
  63.             var channel:int = BitmapDataChannel.ALPHA;
  64.             dmf = new DisplacementMapFilter(nullnew Point(), channel, channel, 5050, DisplacementMapFilterMode.COLOR)
  65.             
  66.             // 画像の配置
  67.             Security.loadPolicyFile("http://farm2.static.flickr.com/crossdomain.xml"); 
  68.             var context:LoaderContext = new LoaderContext(true);
  69.             var loader:Loader = new Loader();
  70.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
  71.             loader.load(new URLRequest("http://farm4.static.flickr.com/3180/3115974098_d1b27674ef.jpg?v=0"), context);
  72.             
  73.             // 水面を表示するための画像を作成
  74.             bitmapData = new BitmapData(FIELD_SIZE_X, FIELD_SIZE_Y, true, 0xFFFFFFFF);
  75.             map = new Bitmap(bitmapData);
  76.             map.scaleX = SCALE;
  77.             map.scaleY = SCALE;
  78.             woterLayer.addChild(map);
  79.             
  80.             // フィールドの初期化
  81.             for (var i:int=0; i<FIELD_SIZE_X; i++)
  82.             {
  83.                 field1[i] = [];
  84.                 field2[i] = [];
  85.                 for (var j:int=0; j<FIELD_SIZE_Y; j++)
  86.                 {
  87.                     field1[i][j] = 0.0;
  88.                     field2[i][j] = 0.0;
  89.                 }
  90.             }
  91.             
  92.         }
  93.         // ----------------------------
  94.         //    内部メソッド
  95.         // ----------------------------
  96.         
  97.         /**
  98.          * 波を立てる。
  99.          * @param px 波を立てる位置(x座標)
  100.          * @param py 波を立てる位置(y座標)
  101.          * @param power
  102.          */
  103.         private function put(px:Number, py:Number, power:Number):void
  104.         {
  105.             // 立てる波の情報
  106.             const r:uint = 5;
  107.             const beginX:int = (px - r < 1) ? 1 : px - r;
  108.             const endX:int = (px + r > FIELD_SIZE_X - 1) ? FIELD_SIZE_X - 1 : px + r;
  109.             const beginY:int = (py - r < 1) ? 1 : py - r;
  110.             const endY:int = (py + r > FIELD_SIZE_Y - 1) ? FIELD_SIZE_Y - 1 : py + r;
  111.             
  112.             // 波の起点を作成
  113.             for (var xx:int=beginX; xx<endX; xx++)
  114.             {
  115.                 for (var yy:int=beginY; yy<endY; yy++)
  116.                 {
  117.                     const d:Number = Point.distance(new Point(px, py), new Point(xx, yy));
  118.                     if (d < r)
  119.                     {
  120.                         var p:Number = power * Math.cos(Math.PI/2 * d/r);
  121.                         field1[xx][yy] += p;
  122.                         field2[xx][yy] += p;
  123.                     }
  124.                 }
  125.             }
  126.         }
  127.         
  128.         
  129.         // ----------------------------
  130.         //    イベント
  131.         // ----------------------------
  132.         private function onComplete(event:Event):void {
  133.             var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo;
  134.             var loader:Loader = loaderInfo.loader;
  135.             var bmp:BitmapData = new BitmapData(loader.width, loader.height, true, 0x00FFFFFF);
  136.             bmp.draw(loader);
  137.             var image:Bitmap = new Bitmap(bmp);
  138.             image.x = 400 - image.width/2;
  139.             image.y = 300 - image.height/2;
  140.             objectLayer.addChild(image);
  141.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  142.             stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  143.         }
  144.         
  145.         private function onMouseMove(event:MouseEvent):void
  146.         {
  147.             put(event.stageX/SCALE, event.stageY/SCALE, 15);
  148.         }
  149.         
  150.         private function onEnterFrame(event:Event):void
  151.         {
  152.             // 初期化
  153.             var xx:int = 0;
  154.             var yy:int = 0;
  155.             
  156.             // 波を描く
  157.             bitmapData.lock();
  158.             for (xx=1; xx<FIELD_SIZE_X; xx++)
  159.             {
  160.                 for (yy=1; yy<FIELD_SIZE_Y; yy++)
  161.                 {
  162.                     var c:uint = Math.abs(field2[xx][yy]);
  163.                     var a:uint = (c + 32 > 255) ? 255 : c + 32;
  164.                     var r:uint = (c + 128 > 255) ? 255 : c + 128;
  165.                     var g:uint = (c + 160 > 255) ? 255 : c + 160;
  166.                     var b:uint = (c + 192 > 255) ? 255 : c + 192;
  167.                     bitmapData.setPixel32(xx-1, yy-1, (a << 24) | (r << 16) | (g << 8) | b);
  168.                 }
  169.             }
  170.             bitmapData.unlock();
  171.             // 波の動きを計算
  172.             for (xx=1; xx<FIELD_SIZE_X-1; xx++)
  173.             {
  174.                 for (yy=1; yy<FIELD_SIZE_Y-1; yy++)
  175.                 {
  176.                     field1[xx][yy] = (field2[xx][yy] * (2 - 4 * C1) - field1[xx][yy] * (1 - C2)
  177.                                         + (field2[xx][yy+1] + field2[xx][yy-1
  178.                                         + field2[xx-1][yy] + field2[xx+1][yy]) * C1) * CC;
  179.                 }
  180.             }
  181.             
  182.             // 次へ
  183.             const temp:Array = field1;
  184.             field1 = field2;
  185.             field2 = temp;
  186.             
  187.             // 全体に水面エフェクト
  188.             var tempBmp:BitmapData = new BitmapData(map.width, map.height, true, 0x00FFFFFF);
  189.             var mat:Matrix = new Matrix();
  190.             mat.scale(map.scaleX, map.scaleY);
  191.             tempBmp.draw(map, mat);
  192.             dmf.mapBitmap = tempBmp
  193.             objectLayer.filters = [dmf];
  194.         }
  195.         
  196.     }
  197. }
noswf
  1. // forked from Wanson's Water Pool
  2. // write as3 code here..
  3. package  {
  4.     import flash.display.*;
  5.     import flash.events.Event;
  6.     import flash.net.*;
  7.     import flash.geom.*;
  8.     import flash.filters.*;
  9.     
  10.     [SWF(width="300", height="300", backgroundColor="0x000000", frameRate="60")]
  11.     public class Program extends Sprite {
  12.         private var demo:Demo;
  13.         private var _screen:Sprite;
  14.         private var _load:Loader;
  15.         private var _filter:DisplacementMapFilter;
  16.         private var _mtx:Matrix;
  17.         
  18.         public function Program() {
  19.             
  20.             _load = new Loader();
  21.             _load.load( new URLRequest("http://img.f.hatena.ne.jp/images/fotolife/t/twitter/20081206/20081206164646.jpg") );
  22.             _load.contentLoaderInfo.addEventListener( Event.COMPLETE, loadComplete );
  23.             this.addChild( _load );
  24.             
  25.             _screen = new Sprite();
  26.             this.addChild( _screen );
  27.             addEventListener(Event.ENTER_FRAME, onEnterFrame);
  28.             demo = new Demo(_screen);
  29.             _screen.blendMode = "overlay";
  30.             
  31.             _filter = new DisplacementMapFilter( nullnew Point(0,0), 115050 )
  32.             _mtx = new Matrix();
  33.             _mtx.scale( 33 );
  34.             
  35.         }
  36.         public function onEnterFrame(ev:Event):void {
  37.             demo.frame();
  38.             this.attach();
  39.         }
  40.         
  41.         public function loadComplete(e:Event):void {
  42.         }
  43.         
  44.         public function attach():void {
  45.             var bmp:BitmapData = new BitmapData(300,300);
  46.             bmp.draw( demo.bmpdata, _mtx );
  47.             _filter.mapBitmap = bmp;
  48.             _load.filters = [ _filter ];
  49.         }
  50.         
  51.     }
  52. }
  53. import flash.display.*;
  54. import flash.events.MouseEvent;
  55. class Demo {
  56.     public var bmpdata:BitmapData;
  57.     private var field1:Array = [];
  58.     private var field2:Array = [];
  59.     private const SIZEX:int = 100;
  60.     private const SIZEY:int = 100;
  61.     private const FSIZEX:int = SIZEX + 2;
  62.     private const FSIZEY:int = SIZEY + 2;
  63.     private const SCALE:int = 3;
  64.     private var ox:int;
  65.     private var oy:int;
  66.     private const c1:Number = 0.5;
  67.     private const c2:Number = 0.005;
  68.     private const cc:Number = 1 / (1 + c2);
  69.     private var filters:Array;
  70.     public function Demo(screen:Sprite) {
  71.         screen.stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
  72.         bmpdata = new BitmapData(SIZEX, SIZEY);
  73.         var mapimg:Bitmap = new Bitmap(bmpdata);
  74.         mapimg.scaleX = mapimg.scaleY = SCALE;
  75.         screen.addChild(mapimg);
  76.         var i:uint;
  77.         var j:uint;
  78.         for (i = 0; i < FSIZEY; ++i) {
  79.             field1.push([]);
  80.             field2.push([]);
  81.             for (j = 0; j < FSIZEX; ++j)
  82.                 field1[i][j] = 0.0;
  83.         }
  84.         // initialize
  85.         for (i = 0; i < FSIZEX; i++)
  86.             field1[0][i] = field1[FSIZEY - 1][i] =
  87.                 field2[0][i] = field2[FSIZEY - 1][i] = 0.0;
  88.         for (i = 0; i < FSIZEY; i++)
  89.             field1[i][0] = field1[i][FSIZEX - 1] =
  90.                 field2[i][0] = field2[i][FSIZEX - 1] = 0.0;
  91.         for (i = 1; i < FSIZEY - 1; ++i)
  92.             for (j = 1; j < FSIZEX - 1; ++j)
  93.                 field2[i][j] = field1[i][j]
  94.                     + 0.25 * (field1[i+1][j] + field1[i-1][j] 
  95.                             + field1[i][j+1] + field1[i][j-1] - 4 * field1[i][j]);
  96.         put(5050300);
  97.     }
  98.     private function onMouseMove(ev:MouseEvent):void {
  99.         put((ev.localX + 1) / SCALE, (ev.localY + 1) / SCALE, 15);
  100.     }
  101.     private function put(px:Number, py:Number, pow:Number):void {
  102.         const r:uint = 10;
  103.         const bx:int = (px - r < 1) ? 1 : px - r;
  104.         const ex:int = (px + r > FSIZEX - 1) ? FSIZEX - 1 : px + r;
  105.         const by:int = (py - r < 1) ? 1 : py - r;
  106.         const ey:int = (py + r > FSIZEY - 1) ? FSIZEY - 1 : py + r;
  107.         for (var y:uint = by; y < ey; ++y) {
  108.             for (var x:uint = bx; x < ex; ++x) {
  109.                 const d:Number = Math.sqrt((px - x) * (px - x) + (py - y) * (py - y));
  110.                 if (d < r) {
  111.                     var p:Number = pow * Math.cos(Math.PI / 2 * d / r);
  112.                     field1[y][x] += p;
  113.                     field2[y][x] += p;
  114.                 }
  115.             }
  116.         }
  117.     } 
  118.     public function frame():void {
  119.         // draw
  120.         var r:uint, g:uint, b:uint, c:uint;
  121.         var x:uint, y:uint;
  122.         var line_c:Array, line_p:Array, line_n:Array;
  123.         bmpdata.lock();
  124.         for (y = 1; y < SIZEY + 1; ++y) {
  125.             line_c = field2[y];
  126.             for (x = 1; x < SIZEX + 1; ++x) {
  127.                 c = Math.abs(line_c[x]);
  128.                 r = c + 140;
  129.                 g = c + 160;
  130.                 b = c + 220;
  131.                 if (r > 255) r = 255;
  132.                 if (g > 255) g = 255;
  133.                 if (b > 255) b = 255;
  134.                 bmpdata.setPixel(x - 1, y - 1, (r << 16) + (g << 8) + b);
  135.             }
  136.         }
  137.         bmpdata.unlock();
  138.         // step
  139.         for (y = 1; y < FSIZEY - 1; ++y) {
  140.             line_p = field2[y - 1];
  141.             line_c = field2[y];
  142.             line_n = field2[y + 1];
  143.             for (x = 1; x < FSIZEX - 1; ++x) {
  144.                 field1[y][x] = (line_c[x] * (2 - 4 * c1)
  145.                         - field1[y][x] * (1 - c2)
  146.                         + c1 * (line_n[x] + line_p[x] 
  147.                             + line_c[x + 1] + line_c[x - 1])) * cc;
  148.             }
  149.         }
  150.         // next
  151.         const tmp:Array = field1;
  152.         field1 = field2;
  153.         field2 = tmp;
  154.     }
  155.     
  156. }
noswf
Get Adobe Flash Player