Melting

by mutantleg
Wanted to create something like the classic Doom screen fade effect
♥0 | Line 93 | Modified 2012-07-26 22:33:35 | MIT License
play

ActionScript3 source code

/**
 * Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/8Dy8
 */

package {
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        public var vecBar:Array = new Array();
        
        public function FlashTest() {
            
            var pic:Bitmap;
            var canvas:BitmapData;
            canvas = new BitmapData(320,240,false);
            canvas.noise(Math.random()*255);
            pic = new Bitmap(canvas);
            //pic.scaleX = pic.scaleY = 2;
            //addChild(pic);
            scaleX = scaleY =2;
           
           var i:int;
           var a:Bar;
           
           for (i = 0; i < 320; i++)
           {
               a = new Bar();
               a.makeBar(canvas,i,0,1,240);
               //a.y = Math.random() * 20;
               addChild(a);
               a.vy = Math.abs(160 - i) * -0.1;
               a.vy += 10;
               if (a.vy < 0) {a.vy= 0;}
               vecBar.push(a);
            }//nexti
           
           
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public function reset():void
        {
            var i:int;
            var num:int;
            var a:Bar;
            num = vecBar.length;
            
            for (i =0; i < num; i++)
            {
               a = vecBar[i];
               a.y = 0;
               a.vy = 0;
               a.vy = Math.abs(160 - i) * -0.1;
               a.vy += 10;
               if (a.vy < 0) {a.vy= 0;}
            }//nexti
            
        }//reset
        
        
        public function onEnter(e:Event):void
        {
            var i:int;
            var num:int;
            var a:Bar;
            var k:Number;
            k = 999;
            num = vecBar.length;
            
            for (i =0; i < num; i++)
            {
               a = vecBar[i];
               a.y += a.vy;
               a.vy += 0.125 + Math.random(); 
               if (a.y < k) { k = a.y;}
            }//nexti
            
            if (k >= 300) { reset(); }
            
        }//onenter
        
        
    }//classend
}
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.display.Sprite;
import flash.display.BitmapData;
import flash.display.Bitmap;

internal class Bar extends Sprite
{
    public var vy:Number = 0;
    
    public var pic:Bitmap;
    public var canvas:BitmapData;
    
    public function Bar() 
    {}//ctor
    
    public static var rect:Rectangle = new Rectangle();
    public static var dest:Point = new Point();
    public function makeBar(src:BitmapData, x_:int, y_:int, w_:int, h_:int):void
    {
     canvas = new BitmapData(w_,h_,false);
     x = x_;
     rect.x = x_;
     rect.y = y_;
     rect.width = w_;
     rect.height = h_;
       canvas.copyPixels(src,rect, dest);
       if (pic == null) 
       {
           pic = new Bitmap(canvas);
       addChild(pic);
       }
        
     }//makebar
    
    
 };//stripe