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


embed

FORKED
  1. // forked from miniapp's うずまき
  2. /**
  3.  * マウスドラッグでもっと渦巻き
  4.  */
  5. package {
  6.     
  7.     import com.flashdynamix.utils.SWFProfiler;
  8.     import flash.display.Bitmap;
  9.     import flash.display.BitmapData;
  10.     import flash.display.BitmapDataChannel;
  11.     import flash.display.Loader;
  12.     import flash.display.Sprite;
  13.     import flash.display.StageAlign;
  14.     import flash.display.StageScaleMode;
  15.     import flash.events.Event;
  16.     import flash.events.MouseEvent;
  17.     import flash.filters.BitmapFilter;
  18.     import flash.filters.DisplacementMapFilter;
  19.     import flash.filters.DisplacementMapFilterMode;
  20.     import flash.geom.Matrix;
  21.     import flash.geom.Point;
  22.     import flash.net.URLRequest;
  23.     import flash.system.LoaderContext;
  24.     
  25.     [SWF(backgroundColor="0xFFFFFF", width="465", height="465", frameRate="60")]
  26.     public class Main7 extends Sprite {
  27.         
  28.         private static const WIDTH_STAGE:uint = 465;
  29.         private static const HEIGHT_STAGE:uint = 465;
  30.         
  31.         public function Main7() {
  32.             if (stage) init();
  33.             else addEventListener(Event.ADDED_TO_STAGE, init);
  34.         }
  35.         
  36.         private var _jpeg:Bitmap;
  37.         private var _canvas:Sprite = new Sprite();
  38.         private var _nowDmfsValue:uint = 0;
  39.         private var _mapBitmaps:Vector.<BitmapData> =  new Vector.<BitmapData>();
  40.         private var _mapBitmapNo:uint = 0;
  41.         private var _radius:Number = 100;
  42.         private var _dmf:DisplacementMapFilter;
  43.         private var _maxDistance:Number;
  44.         private var _map:Sprite;
  45.         private var _bitmap:Bitmap;
  46.         
  47.         private function init(e:Event = null):void {
  48.     
  49.             removeEventListener(Event.ADDED_TO_STAGE, init);
  50.             stage.align = StageAlign.TOP_LEFT;
  51.             stage.scaleMode = StageScaleMode.NO_SCALE;            
  52.             SWFProfiler.init(this);
  53.                         Wonderfl.capture_delay( 3 );    
  54.             var context:LoaderContext = new LoaderContext();
  55.             context.checkPolicyFile = true;
  56.             
  57.             var loader:Loader = new Loader();
  58.             loader.load(new URLRequest("http://miniapp.org/wonderfl/image/beck.jpg"), context);
  59.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void { 
  60.                 _jpeg = Bitmap(loader.content);
  61.                 loader.contentLoaderInfo.removeEventListener(this, arguments.callee);
  62.                 start();
  63.             });
  64.         }
  65.         
  66.         private function start():void { 
  67.             _canvas.addChild(_jpeg);
  68.             _canvas.x = (WIDTH_STAGE - _canvas.width) / 2;
  69.             _canvas.y = (HEIGHT_STAGE - _canvas.height) / 2;
  70.             addChild(_canvas);
  71.             _jpeg.alpha = 0.5;
  72.             
  73.             _maxDistance = _radius * 1.2;//適当 適宜調整
  74.             _dmf = new DisplacementMapFilter(
  75.                 null,
  76.                 new Point(),
  77.                 BitmapDataChannel.BLUE,//x方向の移動に使う色
  78.                 BitmapDataChannel.GREEN,//y方向の移動に使う色
  79.                 _maxDistance * 2,
  80.                 _maxDistance * 2,
  81.                 DisplacementMapFilterMode.COLOR
  82.             );
  83.             
  84.             _mapBitmaps.push(createMapBitmap(180));
  85.             _mapBitmaps.push(createMapBitmap(360));
  86.             
  87.             _map = new Sprite();
  88.             _map.alpha = 0.9;
  89.             _bitmap = new Bitmap(_mapBitmaps[0]);
  90.             _map.addChild(_bitmap);
  91.             _canvas.addChild(_map);
  92.             
  93.             
  94.             stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
  95.             stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
  96.             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  97.         }
  98.         
  99.         private function createMapBitmap(maxRaddian:Number):BitmapData {
  100.             var mapBitmap:BitmapData = new BitmapData(_radius * 2, _radius * 2false);
  101.             
  102.             var yMax:int = _radius * 2;
  103.             var xMax:int = _radius * 2;
  104.             var center:Number = _radius;
  105.             
  106.             var maxRaddian:Number = (Math.PI / 180) * maxRaddian;
  107.             
  108.             var m:Matrix = new Matrix();
  109.             var p:Point = new Point();
  110.             
  111.             mapBitmap.lock();
  112.             for (var xx:Number = 0; xx < xMax; ++xx) {
  113.                 for (var yy:Number = 0; yy < yMax; ++yy) {
  114.                     var dx:Number = xx - center;
  115.                     var dy:Number = yy - center;
  116.                     var distance:Number = Math.sqrt(dx * dx + dy * dy);
  117.                     
  118.                     if(distance < _radius){
  119.                         var powerRate:Number = 1 - (distance / _radius);
  120.                         //円の真ん中を中心として、回転させる行列をつくる。
  121.                         //円の中心に行くにしたがって回転が強くなるようにする。
  122.                         m.identity();
  123.                         m.translate(-center, -center);
  124.                         m.rotate(maxRaddian * powerRate);
  125.                         m.translate(center, center);
  126.                         
  127.                         //現在の(xx, yy)の地点が移動先と考える。
  128.                         //移動前の座標を求めるので、逆行列を求める
  129.                         m.invert();
  130.                         
  131.                         p.x = xx;
  132.                         p.y = yy;
  133.                         
  134.                         var applyPoint:Point = m.transformPoint(p);
  135.                         var rateX:Number = (applyPoint.x - xx) / _maxDistance;
  136.                         var rateY:Number = (applyPoint.y - yy) / _maxDistance;
  137.                         
  138.                         var colorX:Number = Math.round(rateX * 0x7F) + 0x80;
  139.                         var colorY:Number = Math.round(rateY * 0x7F) + 0x80;
  140.                         
  141.                         var color:uint = colorY << 8 | colorX;
  142.                     }
  143.                     else {
  144.                         color = 0x808080;
  145.                     }
  146.                     mapBitmap.setPixel(xx, yy, color);
  147.                 }
  148.             }
  149.             
  150.             mapBitmap.unlock();
  151.             return mapBitmap;
  152.         }
  153.         
  154.         private function mouseDownHandler(e:MouseEvent):void {
  155.             _mapBitmapNo = 1;            
  156.             _bitmap.bitmapData = _mapBitmaps[1];
  157.         }
  158.         
  159.         private function mouseUpHandler(e:MouseEvent):void {
  160.             _mapBitmapNo = 0;
  161.             _bitmap.bitmapData = _mapBitmaps[0];
  162.         }
  163.         
  164.         //マウス中心に動かす
  165.         private function enterFrameHandler(e:Event):void {
  166.             _dmf.mapBitmap = _mapBitmaps[_mapBitmapNo];
  167.             
  168.             var p:Point = _dmf.mapPoint;
  169.             p.x = _canvas.mouseX - _radius;
  170.             p.y = _canvas.mouseY - _radius;
  171.             _dmf.mapPoint = p;
  172.             
  173.             _map.x = _canvas.mouseX- _radius;
  174.             _map.y = _canvas.mouseY- _radius;
  175.             
  176.             _jpeg.filters = [_dmf];
  177.         }
  178.     }
  179. }
noswf
  1. // forked from miniapp's うずまき
  2. /**
  3.  * マウスドラッグでもっと渦巻き
  4.  */
  5. package {
  6.     
  7.     import com.flashdynamix.utils.SWFProfiler;
  8.     import flash.display.Bitmap;
  9.     import flash.display.BitmapData;
  10.     import flash.display.BitmapDataChannel;
  11.     import flash.display.Loader;
  12.     import flash.display.Sprite;
  13.     import flash.display.StageAlign;
  14.     import flash.display.StageScaleMode;
  15.     import flash.events.Event;
  16.     import flash.events.MouseEvent;
  17.     import flash.filters.BitmapFilter;
  18.     import flash.filters.DisplacementMapFilter;
  19.     import flash.filters.DisplacementMapFilterMode;
  20.     import flash.geom.Matrix;
  21.     import flash.geom.Point;
  22.     import flash.net.URLRequest;
  23.     import flash.system.LoaderContext;
  24.     
  25.     [SWF(backgroundColor="0xFFFFFF", width="465", height="465", frameRate="60")]
  26.     public class Main7 extends Sprite {
  27.         
  28.         private static const WIDTH_STAGE:uint = 465;
  29.         private static const HEIGHT_STAGE:uint = 465;
  30.         
  31.         public function Main7() {
  32.             if (stage) init();
  33.             else addEventListener(Event.ADDED_TO_STAGE, init);
  34.         }
  35.         
  36.         private var _jpeg:Bitmap;
  37.         private var _canvas:Sprite = new Sprite();
  38.         private var _nowDmfsValue:uint = 0;
  39.         private var _mapBitmaps:Vector.<BitmapData> =  new Vector.<BitmapData>();
  40.         private var _mapBitmapNo:uint = 0;
  41.         private var _radius:Number = 100;
  42.         private var _dmf:DisplacementMapFilter;
  43.         private var _maxDistance:Number;
  44.         
  45.         private function init(e:Event = null):void {
  46.     
  47.             removeEventListener(Event.ADDED_TO_STAGE, init);
  48.             stage.align = StageAlign.TOP_LEFT;
  49.             stage.scaleMode = StageScaleMode.NO_SCALE;            
  50.             SWFProfiler.init(this);
  51.                         Wonderfl.capture_delay( 3 );    
  52.             var context:LoaderContext = new LoaderContext();
  53.             context.checkPolicyFile = true;
  54.             
  55.             var loader:Loader = new Loader();
  56.             loader.load(new URLRequest("http://miniapp.org/wonderfl/image/beck.jpg"), context);
  57.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void { 
  58.                 _jpeg = Bitmap(loader.content);
  59.                 loader.contentLoaderInfo.removeEventListener(this, arguments.callee);
  60.                 start();
  61.             });
  62.         }
  63.         
  64.         private function start():void { 
  65.             _canvas.addChild(_jpeg);
  66.             _canvas.x = (WIDTH_STAGE - _canvas.width) / 2;
  67.             _canvas.y = (HEIGHT_STAGE - _canvas.height) / 2;
  68.             addChild(_canvas);
  69.             
  70.             _maxDistance = _radius * 1.2;//適当 適宜調整
  71.             _dmf = new DisplacementMapFilter(
  72.                 null,
  73.                 new Point(),
  74.                 BitmapDataChannel.BLUE,//x方向の移動に使う色
  75.                 BitmapDataChannel.GREEN,//y方向の移動に使う色
  76.                 _maxDistance * 2,
  77.                 _maxDistance * 2,
  78.                 DisplacementMapFilterMode.COLOR
  79.             );
  80.             
  81.             _mapBitmaps.push(createMapBitmap(180));
  82.             _mapBitmaps.push(createMapBitmap(360));
  83.             
  84.             stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
  85.             stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
  86.             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  87.         }
  88.         
  89.         private function createMapBitmap(maxRaddian:Number):BitmapData {
  90.             var mapBitmap:BitmapData = new BitmapData(_radius * 2, _radius * 2false);
  91.             
  92.             var yMax:int = _radius * 2;
  93.             var xMax:int = _radius * 2;
  94.             var center:Number = _radius;
  95.             
  96.             var maxRaddian:Number = (Math.PI / 180) * maxRaddian;
  97.             
  98.             var m:Matrix = new Matrix();
  99.             var p:Point = new Point();
  100.             
  101.             mapBitmap.lock();
  102.             for (var xx:Number = 0; xx < xMax; ++xx) {
  103.                 for (var yy:Number = 0; yy < yMax; ++yy) {
  104.                     var dx:Number = xx - center;
  105.                     var dy:Number = yy - center;
  106.                     var distance:Number = Math.sqrt(dx * dx + dy * dy);
  107.                     
  108.                     if(distance < _radius){
  109.                         var powerRate:Number = 1 - (distance / _radius);
  110.                         //円の真ん中を中心として、回転させる行列をつくる。
  111.                         //円の中心に行くにしたがって回転が強くなるようにする。
  112.                         m.identity();
  113.                         m.translate(-center, -center);
  114.                         m.rotate(maxRaddian * powerRate);
  115.                         m.translate(center, center);
  116.                         
  117.                         //現在の(xx, yy)の地点が移動先と考える。
  118.                         //移動前の座標を求めるので、逆行列を求める
  119.                         m.invert();
  120.                         
  121.                         p.x = xx;
  122.                         p.y = yy;
  123.                         
  124.                         var applyPoint:Point = m.transformPoint(p);
  125.                         var rateX:Number = (applyPoint.x - xx) / _maxDistance;
  126.                         var rateY:Number = (applyPoint.y - yy) / _maxDistance;
  127.                         
  128.                         var colorX:Number = Math.round(rateX * 0x7F) + 0x80;
  129.                         var colorY:Number = Math.round(rateY * 0x7F) + 0x80;
  130.                         
  131.                         var color:uint = colorY << 8 | colorX;
  132.                     }
  133.                     else {
  134.                         color = 0x808080;
  135.                     }
  136.                     mapBitmap.setPixel(xx, yy, color);
  137.                 }
  138.             }
  139.             
  140.             mapBitmap.unlock();
  141.             return mapBitmap;
  142.         }
  143.         
  144.         private function mouseDownHandler(e:MouseEvent):void {
  145.             _mapBitmapNo = 1;
  146.         }
  147.         
  148.         private function mouseUpHandler(e:MouseEvent):void {
  149.             _mapBitmapNo = 0;
  150.         }
  151.         
  152.         //マウス中心に動かす
  153.         private function enterFrameHandler(e:Event):void {
  154.             _dmf.mapBitmap = _mapBitmaps[_mapBitmapNo];
  155.             
  156.             var p:Point = _dmf.mapPoint;
  157.             p.x = _canvas.mouseX - _radius;
  158.             p.y = _canvas.mouseY - _radius;
  159.             _dmf.mapPoint = p;
  160.             
  161.             _jpeg.filters = [_dmf];
  162.         }
  163.     }
  164. }
noswf
Get Adobe Flash Player