Flash #001 Media
http://takepepe.com/?p=195
/**
* Copyright takepepe ( http://wonderfl.net/user/takepepe )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/t0eb
*/
package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.media.*;
import flash.net.*;
import flash.system.*;
import flash.filters.DisplacementMapFilter;
import flash.text.TextField;
public class Main extends Sprite{
public static const WIDTH:Number = 465;
public static const HEIGHT:Number = 465;
public static const CAMERA_WIDTH:Number = 640;
public static const CAMERA_HEIGHT:Number = 480;
public static const OFFSET:Number = 1.6;
private var loader:Loader;
private var lens:Bitmap;
private var lensBmd:BitmapData;
private var lensR:Rectangle = new Rectangle(0,110,250,160);
private var screenBmd:BitmapData;
private var screen:Bitmap;
private var frame:Bitmap;
private var frameBmd:BitmapData;
private var caption:TextField;
private var transformer:BitmapData;
private var camera:Camera;
private var video:Video;
public function Main() {
Security.loadPolicyFile( "http://takepepe.com/crossdomain.xml" ) ;
setCaption();
loader = new Loader();
loadFrame();
}
/*
@ load Assets
=================================*/
private function loadFrame():void{
loader.load(new URLRequest("http://takepepe.com/wp-content/uploads/2013/02/Falsh001_frame.png"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadLens);
}
private function loadLens(e:Event):void{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,loadLens);
frameBmd = new BitmapData(WIDTH,HEIGHT,true,0x00000000);
frameBmd.draw(loader);
loader.load(new URLRequest("http://takepepe.com/wp-content/uploads/2013/02/Falsh001_lens.png"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadedAssets);
}
private function onLoadedAssets(e:Event):void{
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoadedAssets);
lensBmd = new BitmapData(WIDTH,HEIGHT,true,0x00000000);
lensBmd.draw(loader);
init();
}
/*
@ setup
=================================*/
private function init():void{
setAvator();
setTransformer();
setCamera();
}
private function setAvator():void{
lens = new Bitmap (lensBmd);
lens.alpha = 0.2;
addChild(lens);
screenBmd = new BitmapData(lensR.width*OFFSET,lensR.height*OFFSET,true,0x00000000);
screen = new Bitmap(screenBmd);
screen.blendMode = "overlay";
screen.x = -95;
screen.y = 85;
screen.alpha = 0.2;
addChild(screen);
frame = new Bitmap (frameBmd);
frame.alpha = 0.2;
addChild(frame);
}
private function setCaption():void{
caption = new TextField ();
caption.x = 10;
caption.y = 10;
caption.textColor = 0xFFFFFF;
caption.text = "Wait a minute...";
addChild(caption);
}
private function setTransformer():void{
var sp:Shape = new Shape();
var gr:Graphics = sp.graphics;
var fillType:String = GradientType.RADIAL;
var colors:Array = [0xFF0000,0x0000FF];
var alphas:Array = [1, 1];
var ratios:Array = [0, 255];
var matr:Matrix = new Matrix();
matr.createGradientBox(lensR.width*2*OFFSET, lensR.height*2*OFFSET, 0, lensR.width*-0.5*OFFSET,lensR.height*-0.3*OFFSET);
var spreadMethod:String =SpreadMethod.PAD;
gr.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod);
gr.drawRect(lensR.x*OFFSET,0,lensR.width*OFFSET,lensR.height*OFFSET*2);
transformer = new BitmapData(WIDTH,HEIGHT);
transformer.draw(sp);
}
private function setCamera():void{
camera = Camera.getCamera();
camera.setMode(lensR.width*OFFSET,lensR.height*OFFSET,30,true);
camera.addEventListener(ActivityEvent.ACTIVITY,onActiveCamera);
video = new Video(lensR.width*OFFSET,lensR.height*OFFSET);
video.attachCamera(camera);
}
private function onActiveCamera(e:ActivityEvent):void{
if(e.activating){
caption.text = "Active";
lens.alpha = 1
screen.alpha = 1
frame.alpha = 1
addEventListener(Event.ENTER_FRAME,update);
addEventListener(Event.ENTER_FRAME,draw);
}else{
removeEventListener(Event.ENTER_FRAME,update);
removeEventListener(Event.ENTER_FRAME,draw);
}
}
/*
@ main loop
=================================*/
private function update(e:Event):void{
var mapPoint:Point = new Point(0, 0);
var componentX:uint = BitmapDataChannel.GREEN;
var componentY:uint = BitmapDataChannel.RED ;
var forceX:Number = 0;
var forceY:Number = 200;
var my_filter:DisplacementMapFilter = new DisplacementMapFilter(transformer, mapPoint, componentX, componentY, forceX, forceY, "color", 0, 0);
screen.filters = new Array(my_filter)
}
private function draw(e:Event):void{
var matrix:Matrix = new Matrix();
matrix.scale(-1, 1);
matrix.translate(screenBmd.width, 0);
screenBmd.draw(video, matrix);
}
}
}