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

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

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


forked from : mex's 【AS100本ノック】11回目:ろうそく [diff(330)]

FAVORITE BY
:
:
おもしろい!
:
velamuito massa
:
とろけるタワー。drawTriangleのおもしろい使い方。
:
おもしろい
FORKED

forked from: 【AS100本ノック】11回目:ろうそく forked from: forked from: 【AS100本ノック】11回目:ろうそく [diff(1)]

  1. // forked from mex_takagi's forked from: 【AS100本ノック】11回目:ろうそく
  2. // forked from mex's 【AS100本ノック】11回目:ろうそく
  3. /**
  4.  * AS100本ノック
  5.  * 11回目のお題は「ろうそく」
  6.  * あなたなりの「ろうそく」を表現してください。
  7.  * 
  8.  * 画像が溶ける
  9.  * 最近勉強したdrawTrianglesで描画。
  10.  **/
  11. package 
  12. {
  13.     import flash.display.Bitmap;
  14.     import flash.display.BitmapData;
  15.     import flash.display.Loader;
  16.     import flash.display.Sprite;
  17.     import flash.events.Event;
  18.     import flash.events.TimerEvent;
  19.     import flash.net.URLRequest;
  20.     import flash.filters.DisplacementMapFilter;
  21.     import flash.filters.DisplacementMapFilterMode;
  22.     import flash.filters.GradientGlowFilter;
  23.     import flash.filters.BlurFilter;
  24.     import flash.geom.Point;
  25.     import flash.geom.Matrix;
  26.     import flash.utils.Timer;
  27.     import flash.system.LoaderContext;
  28.     /**
  29.      * @author Mao Takagi
  30.      */
  31.     [SWF(width = "465", height = "465", backgroundColor = 0x000000, frameRate = "60")]
  32.     public class Main extends Sprite 
  33.     {
  34.         private const MAX_IMAGE_WIDTH:uint = 250;
  35.         private const MAX_IMAGE_HEIGHT:uint = 500;
  36.         private var _points:uint;
  37.         private var _vertices:Vector.<Number>;
  38.         private var _indices:Vector.<int>;
  39.         private var _uvtData:Vector.<Number>;
  40.         private var _pointArray:Vector.<MeltPoint>;
  41.         private var _adjustX:Number;
  42.         private var _adjustY:Number;
  43.         private var _scale:Number;
  44.         
  45.         private var _loader:Loader;
  46.         private var _bitmap:Bitmap;
  47.         private var _bitmapData:BitmapData;
  48.         private var _graphic:Sprite;
  49.         private var _pointMax:uint;
  50.         private var _canvasBmd:BitmapData;
  51.         private var _canvas:Bitmap;
  52.         private var _canvasSprite:Sprite;
  53.         private var _fire:BallUnit;
  54.         private var _fireY:Number;
  55.         
  56.         private var _meltTimer:Timer;
  57.         private var _nowLine:uint;
  58.         private var _firstine:Vector.<MeltPoint>;
  59.         /**
  60.          * constructor
  61.          */
  62.         public function Main():void 
  63.         {
  64.             _vertices = new Vector.<Number>();
  65.             _indices = new Vector.<int>();
  66.             _uvtData = new Vector.<Number>();
  67.             _pointArray = new Vector.<MeltPoint>();
  68.             _firstine = new Vector.<MeltPoint>();
  69.             _points = 20;
  70.             _graphic = new Sprite();
  71.             
  72.             _nowLine = 0;
  73.             _meltTimer = new Timer(2 * 1000);
  74.             _meltTimer.addEventListener(TimerEvent.TIMER, onTimerHandler);
  75.             
  76.             var context:LoaderContext = new LoaderContext(true);
  77.             _loader = new Loader();
  78.             _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoadComplete);
  79.             //_loader.load(new URLRequest("http://farm4.static.flickr.com/3057/2930778027_b4faff737a.jpg"), context);
  80.             _loader.load(new URLRequest("http://farm5.static.flickr.com/4001/4281928692_8f8fe04824.jpg"), context);
  81.         }
  82.         /**
  83.          * onImageLoadComplete
  84.          * @param event Event
  85.          */
  86.         private function onImageLoadComplete(event:Event):void 
  87.         {
  88.             event.target.removeEventListener(Event.COMPLETE, onImageLoadComplete);
  89.             var scaleX:Number = _loader.width / MAX_IMAGE_WIDTH;
  90.             var scaleY:Number = _loader.height / MAX_IMAGE_HEIGHT;
  91.             var matrix:Matrix = new Matrix();
  92.             _scale = 1;
  93.             if (scaleX > 1 || scaleY > 1
  94.             {
  95.                 _scale = 1 / Math.max(scaleX, scaleY);
  96.                 matrix.scale(_scale, _scale);
  97.             }
  98.             _bitmapData = new BitmapData(_loader.width * _scale, _loader.height * _scale, true, 0x00000000);
  99.             _bitmap = new Bitmap(_bitmapData);
  100.             
  101.             _bitmapData.draw(_loader, matrix);
  102.             _bitmap.x = (stage.stageWidth - _bitmap.width) / 2;
  103.             _bitmap.y = (stage.stageHeight - _bitmap.height) / 2;
  104.             _adjustX = (stage.stageWidth - _bitmap.width) / 2;
  105.             _adjustY = (stage.stageHeight - _bitmap.height) / 2;
  106.             
  107.             var spanX:Number = _bitmap.width / _points;
  108.             var spanY:Number = _bitmap.height / _points;
  109.             var i:uint = 0;
  110.             var j:uint = 0;
  111.             for (i = 0;i < _points + 1;i++ )
  112.             {
  113.                 for (j = 0;j < _points + 1;j++ )
  114.                 {
  115.                     var point:MeltPoint = new MeltPoint(j * spanX, i * spanY, _bitmap.height);
  116.                     if (i == 0)_firstine.push(point);
  117.                     _pointArray.push(point);
  118.                 }
  119.             }
  120.             _pointMax = _pointArray.length;
  121.             
  122.             var uvtSpan:Number = 1 / _points;
  123.             var ins:uint = 0;
  124.             for(i = 0;i < _points;i++)
  125.             {
  126.                 for (j = 0;j < _points;j++)
  127.                 {
  128.                     _indices.push(ins + 0, ins + 1, ins + 2);
  129.                     _indices.push(ins + 1, ins + 2, ins + 3);
  130.                     ins += 4;
  131.                     
  132.                     _uvtData.push((j) * uvtSpan, (i) * uvtSpan);
  133.                     _uvtData.push(((j) * uvtSpan) + uvtSpan, (i) * uvtSpan);
  134.                     _uvtData.push((j) * uvtSpan, ((i) * uvtSpan) + uvtSpan);
  135.                     _uvtData.push(((j) * uvtSpan) + uvtSpan, ((i) * uvtSpan) + uvtSpan);
  136.                 }
  137.             }
  138.             
  139.             _graphic.x = _adjustX;
  140.             _graphic.y = _adjustY;
  141.             
  142.             _canvasSprite = new Sprite();
  143.             _canvasBmd = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xFF000000);
  144.             _canvas = new Bitmap(_canvasBmd);
  145.             _fire = new BallUnit();
  146.             _fire.x = stage.stageWidth / 2 + _fire.width / 2;
  147.             _canvasSprite.addChild(_fire);
  148.             
  149.             var glowFileter:GradientGlowFilter = new GradientGlowFilter(1090, [0xFF0000, 0xFFFF00, 0xFFFFFF], [0.80.61], [0120255], 81011);
  150.             var blurFileter:BlurFilter = new BlurFilter(10101);
  151.             _canvasSprite.filters = [blurFileter, glowFileter];
  152.             addChild(_canvas);
  153.             
  154.             addChild(_graphic);
  155.             _meltTimer.start();
  156.             addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  157.             
  158.         }
  159.         /**
  160.          * fireY
  161.          * @return Number
  162.          */
  163.         private function fireY():Number 
  164.         {
  165.             var temp:Array = new Array();
  166.             for (var i:uint = 0; i <  _points + 1;i++ )
  167.             {
  168.                 temp.push(_firstine[i].y);
  169.             }
  170.             return Math.min.apply(null, temp) + _adjustY;
  171.         }
  172.         /**
  173.          * onTimerHandler
  174.          * @param event TimerEvent
  175.          */
  176.         private function onTimerHandler(event:TimerEvent):void 
  177.         {
  178.             if (_nowLine < _points)
  179.             {
  180.                 var i:uint;
  181.                 for (i = 0; i < _points; i++ ) 
  182.                 {
  183.                     var target:MeltPoint = _pointArray[_nowLine * _points + i];
  184.                     target.melt();
  185.                 }
  186.                 _nowLine++;
  187.             }
  188.         }
  189.         /**
  190.          * enterFrameHandler
  191.          * @param event Event
  192.          */
  193.         private function enterFrameHandler(event:Event):void 
  194.         {
  195.             draw();
  196.         }
  197.         /**
  198.          * draw
  199.          */
  200.         private function draw():void 
  201.         {
  202.             var i:uint = 0;
  203.             var j:uint = 0;
  204.             _graphic.graphics.clear();
  205.             _vertices = new Vector.<Number>();
  206.             for (i = 0; i < _points; i++)
  207.             {
  208.                 for (j = 0; j < _points; j++)
  209.                 {
  210.                     var base:uint = i * (_points + 1) + j;
  211.                     var leftTop:MeltPoint = _pointArray[base];
  212.                     var rightTop:MeltPoint = _pointArray[base + 1];
  213.                     var leftBottom:MeltPoint = _pointArray[base + _points + 1];
  214.                     var rightBottom:MeltPoint = _pointArray[base + _points + 2];
  215.                     
  216.                     _vertices.push(leftTop.x, leftTop.y);
  217.                     _vertices.push(rightTop.x, rightTop.y);
  218.                     _vertices.push(leftBottom.x, leftBottom.y);
  219.                     _vertices.push(rightBottom.x, rightBottom.y);
  220.                 }
  221.             }
  222.             _graphic.graphics.beginBitmapFill(_bitmapData);
  223.             _graphic.graphics.drawTriangles(_vertices, _indices, _uvtData);
  224.             _graphic.graphics.endFill();
  225.             
  226.             _fire.y = fireY();
  227.             _canvas.bitmapData.dispose();
  228.             var bmd:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0xFF000000);
  229.             bmd.lock();
  230.             bmd.draw(_canvasSprite);
  231.             bmd.unlock();
  232.             bmd.paletteMap(bmd, bmd.rect, bmd.rect.topLeft, nullnullnull);
  233.             _canvas.bitmapData = bmd;
  234.         }
  235.     }
  236. }
  237. import flash.geom.Point;
  238. import org.libspark.betweenas3.BetweenAS3;
  239. import org.libspark.betweenas3.events.TweenEvent;
  240. import org.libspark.betweenas3.tweens.ITween;
  241. class MeltPoint extends Point
  242. {
  243.     private var _target:Number;
  244.     private var _rate:Number;
  245.     private var _tempTarget:Number;
  246.     /**
  247.      * constructor
  248.      */
  249.     public function MeltPoint(x:Number, y:Number, target:Number)
  250.     {
  251.         super(x, y);
  252.         _target = target;
  253.         _rate = _target / 10;
  254.     }
  255.     /**
  256.      * melt
  257.      * @param 
  258.      */
  259.     public function melt():void 
  260.     {
  261.         _tempTarget = _rate + y;
  262.         if (_tempTarget < _target) 
  263.         {
  264.             var t:ITween = BetweenAS3.tween(this, { y:_tempTarget }, null, Math.random() * 2 + 6);
  265.             t.addEventListener(TweenEvent.COMPLETE, function():void
  266.             {
  267.                 t.removeEventListener(TweenEvent.COMPLETE, arguments.callee);
  268.                 melt();
  269.             });
  270.             t.play();
  271.         }
  272.     }
  273. }
  274. import flash.display.Sprite
  275. class BallUnit extends Sprite
  276. {
  277.     private var _ballArray:Vector.<Ball>;
  278.     /**
  279.      * constructor
  280.      */
  281.     public function BallUnit()
  282.     {
  283.         _ballArray = new Vector.<Ball>();
  284.         
  285.         for (var i:uint = 0; i < 5;i++ )
  286.         {
  287.             var ball:Ball = new Ball(35 - (i * 4));
  288.             ball.y = -i * 5;
  289.             _ballArray.push(ball);
  290.             if (i != 0)
  291.             {
  292.                 _ballArray[i - 1].addChild(ball);
  293.             }
  294.             else
  295.             {
  296.                 addChild(ball);
  297.             }
  298.         }
  299.     }
  300. }
  301. import flash.display.Sprite
  302. import flash.events.Event;
  303. import flash.filters.BlurFilter;
  304. class Ball extends Sprite
  305. {
  306.     /**
  307.      * constructor
  308.      * @param size
  309.      */
  310.     public function Ball(size:uint)
  311.     {
  312.         var sprite:Sprite = new Sprite();
  313.         sprite.graphics.beginFill(0xFFFFFF);
  314.         sprite.graphics.drawCircle(00, size / 2);
  315.         sprite.graphics.endFill();
  316.         sprite.x = -size / 2;
  317.         sprite.y = -size / 2;
  318.         
  319.         var filter:BlurFilter = new BlurFilter();
  320.         sprite.filters = [filter];
  321.         
  322.         addChild(sprite);
  323.         addEventListener(Event.ENTER_FRAME, enterFrameHandler);
  324.     }
  325.     /**
  326.      * enterFrameHandler
  327.      * @param event
  328.      */
  329.     private function enterFrameHandler(event:Event):void
  330.     {
  331.         x += Math.random() * Math.random()*(2 - (-2) + 1) + (-2) - x;
  332.         y += Math.random() * Math.random()*(6 - (-6) + 1) + (-6) - y - 6;
  333.     }
  334. }
noswf
Get Adobe Flash Player