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

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

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


FAVORITE BY
:
:
:
bitmapdatadotドットがぶわーって絵になったりどっかいっちゃったり
FORKED
  1. // forked from soundkitchen's ドット絵的ななにか
  2. package
  3. {
  4.     import flash.display.Bitmap;
  5.     import flash.display.BitmapData;
  6.     import flash.display.Graphics;
  7.     import flash.display.Loader;
  8.     import flash.display.Shape;
  9.     import flash.display.Sprite;
  10.     import flash.display.StageAlign;
  11.     import flash.display.StageQuality;
  12.     import flash.display.StageScaleMode;
  13.     import flash.filters.BlurFilter;
  14.     import flash.events.Event;
  15.     import flash.events.IOErrorEvent;
  16.     import flash.events.MouseEvent;
  17.     import flash.events.SecurityErrorEvent;
  18.     import flash.geom.Point;
  19.     import flash.net.URLRequest;
  20.     import flash.system.ApplicationDomain;
  21.     import flash.system.LoaderContext;
  22.     [SWF(frameRate=60, width=465, height=465, backgroundColor=0x000000)]
  23.     /**
  24.      *  画像読み込んでゴニョゴニョするよ
  25.      */
  26.     public class Main extends Sprite
  27.     {
  28.         /**
  29.          *  適当に選んだ Flickr のサムネイル画像の URL
  30.          */
  31.         public static const IMAGE_URL:String = 'http://farm3.static.flickr.com/2320/2056363823_ee69da67b9_s.jpg';
  32.         /**
  33.          *  ぽつぽつの半径
  34.          */
  35.         public static const RADIUS:Number = 3;
  36.         private var parts:Vector.<Particle>;
  37.         private var canvas:Shape;
  38.         private var film:BitmapData;
  39.         /**
  40.          *  コンストラクタ
  41.          */
  42.         public function Main()
  43.         {
  44.             addEventListener(Event.ENTER_FRAME, this.enterFrameHandler);
  45.         }
  46.         
  47.         /**
  48.          *  stage を監視
  49.          *  firefox3@mac対応
  50.          */
  51.         private function enterFrameHandler(event:Event):void
  52.         {
  53.             if (stage.stageWidth && stage.stageHeight)
  54.             {
  55.                 removeEventListener(Event.ENTER_FRAME, this.enterFrameHandler);
  56.                 
  57.                 initialize();
  58.             }
  59.         }
  60.         /**
  61.          *  stage のサイズが取得できた時の処理
  62.          */
  63.         private function initialize():void
  64.         {
  65.             //  stage の設定
  66.             stage.align = StageAlign.TOP_LEFT;
  67.             stage.quality = StageQuality.MEDIUM;
  68.             stage.scaleMode = StageScaleMode.NO_SCALE;
  69.             //  色々書き込むためのキャンバス用 Shape
  70.             canvas = new Shape();
  71.             //  最終的に書き込まれるフィルム用 BitmapData
  72.             film = new BitmapData(stage.stageWidth, stage.stageHeight, false0);
  73.             addChild(new Bitmap(film));
  74.             //  画像読み込み処理へ
  75.             loadImage();
  76.         }
  77.         /**
  78.          *  画像を読み込む処理
  79.          */
  80.         private function loadImage():void
  81.         {
  82.             var req:URLRequest,
  83.                 loader:Loader,
  84.                 ctx:LoaderContext;
  85.             req = new URLRequest(IMAGE_URL);
  86.             ctx = new LoaderContext(true);
  87.             loader = new Loader();
  88.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
  89.             loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loadFailure);
  90.             loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loadFailure);
  91.             loader.load(req, ctx);
  92.         }
  93.         /**
  94.          *  画像読み込み完了時の処理
  95.          */
  96.         private function loadComplete(evt:Event):void
  97.         {
  98.             var i:uint,
  99.                 w:uint, h:uint,
  100.                 centerX:Number, centerY:Number,
  101.                 angle:Number,
  102.                 p:Particle,
  103.                 bmd:BitmapData;
  104.             centerX = stage.stageWidth / 2;
  105.             centerY = stage.stageHeight / 2;
  106.             //  元画像を取ってくる
  107.             bmd = Bitmap(evt.target.content).bitmapData;
  108.             //  必要な数だけパーティクルを作る
  109.             parts = new Vector.<Particle>(bmd.width * bmd.height, true);
  110.             for (i=0; i<parts.length; i++)
  111.             {
  112.                 //  縦・横のポジションを計算
  113.                 w = Math.floor(i % bmd.width);
  114.                 h = Math.floor(i / bmd.width);
  115.                 //  パーティクル作るよ。
  116.                 p = new Particle();
  117.                 //  色を元画像から取ってくる。
  118.                 p.color = bmd.getPixel(w, h);
  119.                 //  目標地点をセット
  120.                 p.end = new Point(w * RADIUS * 2 + RADIUS,
  121.                                   h * RADIUS * 2 + RADIUS);
  122.                 //  スタート地点をセット
  123.                 angle = Math.random() * Math.PI * 2;
  124.                 p.start = new Point(Math.cos(angle) * 500 + centerX,
  125.                                     Math.sin(angle) * 500 + centerY);
  126.                 //  FIXME: ココがダサい
  127.                 //  スタート地点を現在地にコピー
  128.                 p.x = p.start.x;
  129.                 p.y = p.start.y;
  130.                 //  配列に特攻む
  131.                 parts[i] = p;
  132.             }
  133.             //  元画像を破棄
  134.             bmd.dispose();
  135.             //  イベント群を登録
  136.             addEventListener(Event.ENTER_FRAME, step);
  137.             stage.addEventListener(MouseEvent.CLICK, toggleReverse);
  138.         }
  139.         /**
  140.          *  毎フレームでパーティクルを動かす
  141.          */
  142.         private function step(evt:Event):void
  143.         {
  144.             var i:uint,
  145.                 l:uint,
  146.                 p:Particle,
  147.                 g:Graphics;
  148.             l = parts.length;
  149.             g = canvas.graphics;
  150.             g.clear();
  151.             for (i=0; i<l; i++)
  152.             {
  153.                 p = parts[i];
  154.                 p.update(stage.mouseX, stage.mouseY);
  155.                 g.beginFill(p.color);
  156.                 g.drawCircle(p.x, p.y, RADIUS * p.scale);
  157.                 g.endFill();
  158.             }
  159.             film.lock();
  160.             film.fillRect(film.rect, 0);
  161.             film.draw(canvas);
  162.             film.applyFilter(film, film.rect, new Point(00), new BlurFilter(55));
  163.             film.unlock();
  164.         }
  165.         /**
  166.          *  stage をクリックされた時の処理
  167.          */
  168.         private function toggleReverse(evt:MouseEvent):void
  169.         {
  170.             //  reverse なフラグを逆にする
  171.             Particle.reverse = !Particle.reverse;
  172.         }
  173.         /**
  174.          *  読み込みエラー時の処理
  175.          */
  176.         private function loadFailure(evt:Event):void
  177.         {
  178.             //  トレースするだけ
  179.             trace(evt);
  180.         }
  181.     }
  182. }
  183. import flash.geom.Point;
  184. class Particle
  185. {
  186.     private const SPRING_CONST:Number = 0.11;
  187.     private const FRICTION:Number = 0.89;
  188.     public static var reverse:Boolean = false;
  189.     public var start:Point;
  190.     public var end:Point;
  191.     public var color:uint;
  192.     public var x:Number;
  193.     public var y:Number;
  194.     
  195.     public var v:Number = 0;
  196.     public var tmpScale:Number = 0;
  197.     public var scale:Number = 0;
  198.     public function Particle()
  199.     {
  200.     
  201.     }
  202.     public function update(mouseX:Number, mouseY:Number):void
  203.     {
  204.         var target:Point,
  205.             delta:Point;
  206.         target = reverse ? start : end;
  207.         delta = target.subtract(new Point(x, y));
  208.         x += delta.x * .1;
  209.         y += delta.y * .1;
  210.         var dx:Number = mouseX - x;
  211.         var dy:Number = mouseY - y;
  212.     var distance:Number = Math.sqrt(dx * dx + dy * dy);
  213.     if (distance < 100)
  214.     {
  215.             tmpScale = 1 + (10 / (distance / 10 + 1));
  216.     }
  217.     else
  218.     {
  219.             tmpScale = 1;
  220.     }
  221.     
  222.     this.applyScale();
  223.     }
  224.     
  225.     private function applyScale():void
  226.     {
  227.         var scaledis:Number = tmpScale - scale;
  228.         var a:Number = SPRING_CONST * scaledis;
  229.         v += a;
  230.         v *= FRICTION;
  231.     
  232.         scale += v;
  233.         scale += v;
  234.     }
  235. }
noswf
Get Adobe Flash Player