flash on 2013-4-11
mouse click -> explode
/**
* Copyright about ( http://wonderfl.net/user/about )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/uyeN
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.system.LoaderContext;
[SWF(width="465",height="465",backgroundColor="0")]
public class particle7 extends Sprite{
private var button:SimpleButton;
private var button2:SimpleButton;
private var url:String = "http://assets.wonderfl.net/images/related_images/2/2e/2e06/2e067bef7e6bb95e322de159d9f1b749b01ef872";
private var fileReference:FileReference;
private var loader:Loader=new Loader();
private var bmpd:BitmapData;
private var canvas:BitmapData;
private var bmp:Bitmap;
private var ctf:ColorTransform = new ColorTransform(0.4,0.7,0.97,1);
private var particles:Vector.<Particle> = new Vector.<Particle>;
private var button_flag:Boolean = false;
private var button2_flag:Boolean = false;
private var radian:Number = 100;
public function particle7():void{
//button
//left
var up:Button = new Button(0x00ffff,"Reload",100);
var over:Button = new Button(0xFF4500,"Reload",100);
button = new SimpleButton(up, over, over, over);
button.x = 0;
button.y = stage.stageHeight - button.height;
button.addEventListener(MouseEvent.CLICK, onMouseClick);
//right
var up2:Button = new Button(0x00ffff,"select a photo",200);
var over2:Button = new Button(0xff4500,"select a photo",200);
button2 = new SimpleButton(up2,over2,over2,over2);
button2.x = 280;
button2.y = stage.stageHeight - button2.height;
button2.addEventListener(MouseEvent.CLICK,onMouseClick_select);
//file reference(uploading picture)
fileReference = new FileReference();
fileReference.addEventListener(Event.SELECT, selectHandler);
fileReference.addEventListener(Event.COMPLETE, completeHandler);
//canvas
canvas= new BitmapData(465,465,false,0);
//loding image
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);
loader.load(new URLRequest(url), new LoaderContext(true));
}
private function loadComplete(e:Event):void{
var lo:Loader = Loader(e.target.loader);
bmpd= new BitmapData(300,300,false,0);
//画像の大きさ調整
var matrix:Matrix = new Matrix();
matrix.scale(300 /loader.width, 300 /loader.height);
bmpd.draw(lo.content,matrix);
bmp = new Bitmap(canvas);
addChild(bmp);
addChild(button);
addChild(button2);
Start();
stage.addEventListener(MouseEvent.CLICK,start_explode);
}
//image select
private function selectHandler(event:Event):void{
fileReference.load();
}
private function completeHandler(event:Event):void{
var loader:Loader = new Loader();
loader.loadBytes(fileReference.data);
loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
}
private function initHandler(event:Event):void{
var loader2:Loader = event.currentTarget.loader;
canvas.fillRect(canvas.rect,0);
var matrix:Matrix = new Matrix();
matrix.scale(300 /loader2.width, 300 /loader2.height);
bmpd.draw(loader2,matrix);
Start();
}
//start
private function Start():void{
if(particles.length != 0) particles.splice(0,particles.length);
addEventListener(Event.ENTER_FRAME,onEnterFrame2);
Analysis();
make_canvas();
}
private function Analysis():void{
for(var i:int=0;i<bmpd.width;i+=2){
for(var j:int=0;j<bmpd.height;j+=2){
var p:Particle = new Particle(i,j,bmpd.getPixel(i,j));
particles.push(p);
}
}
}
private function make_canvas():void{
canvas.lock();
var n:Number = particles.length;
while(n--){
canvas.setPixel(particles[n].xx,particles[n].yy,particles[n].color);
}
canvas.unlock();
}
//mouse event
//button
private function onMouseClick(e:MouseEvent):void{
button_flag = true;
addEventListener(Event.ENTER_FRAME,onEnterFrame2);
removeEventListener(Event.ENTER_FRAME,onEnterFrame);
canvas.fillRect(canvas.rect,0);
var len:Number = particles.length;
particles.splice(0,len);
Start();
}
private function start_explode(e:MouseEvent):void{
if(!button_flag && !button2_flag){
removeEventListener(Event.ENTER_FRAME,onEnterFrame2);
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
else{
button_flag = false;
button2_flag = false;
}
}
//image select
private function onMouseClick_select(event:MouseEvent):void{
button2_flag = true;
removeEventListener(Event.ENTER_FRAME,onEnterFrame);
removeEventListener(Event.ENTER_FRAME,onEnterFrame2);
var fileFilter:FileFilter = new FileFilter("Images(JPEG,PNG)", "*.jpg;*.png");
fileReference.browse([fileFilter]);
}
//EnterFrame
//explode
private function onEnterFrame(e:Event):void{
canvas.colorTransform(canvas.rect,ctf);
canvas.applyFilter(canvas,canvas.rect,canvas.rect.topLeft,new BlurFilter(50,50,1));
canvas.lock();
var n:Number = particles.length;
while(n--){
particles[n].xx += particles[n].vx;
particles[n].yy += particles[n].vy;
canvas.setPixel(particles[n].xx,particles[n].yy,particles[n].color);
// if(particles[n].xx > 500) particles[n].xx = -50;
// else if(particles[n].xx < 0) particles[n].xx = 550;
//
// if(particles[n].yy > 500) particles[n].yy = -50;
// else if(particles[n].yy < 0) particles[n].yy = 550;
}
canvas.unlock();
}
//mouse move animation
private function onEnterFrame2(e:Event):void{
var n:Number = particles.length;
canvas.lock();
while(n--){
var angle:Number = Math.atan2(particles[n].yy - mouseY,particles[n].xx - mouseX);
var distance:Number = Math.sqrt(Math.pow(mouseX-particles[n].xx,2)+Math.pow(mouseY-particles[n].yy,2));
var circle:Number = radian / distance;
if((mouseX == 0 || mouseY == 0) || (mouseX <= 100 && mouseY >= 450) || (mouseX >= 300 && mouseY >= 450))
continue;
if(distance < 50 || (mouseX != 0 && mouseY != 0 )){
canvas.setPixel(particles[n].xx,particles[n].yy,0);
particles[n].xx += circle*Math.cos(angle);
particles[n].yy += circle*Math.sin(angle);
canvas.setPixel(particles[n].xx,particles[n].yy,particles[n].color);
}
else{
if(canvas.getPixel(particles[n].fx,particles[n].fy) == 0){
canvas.setPixel(particles[n].xx,particles[n].yy,0);
canvas.setPixel(particles[n].fx,particles[n].fy,particles[n].color);
}
}
}
canvas.unlock();
}
}
}
//particle
class Particle{
//position
//now
public var xx:Number;
public var yy:Number;
//first
public var fx:Number;
public var fy:Number;
public var color:uint;
public var vx:Number;
public var vy:Number;
public function Particle(xx,yy,color){
this.fx = xx;
this.fy = yy;
this.xx = xx;
this.yy = yy;
this.vx = Math.random()*60-40;
this.vy = Math.random()*60-40;
this.color = color;
}
}
//Button
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFormat;
class Button extends Sprite
{
public function Button(color:int,text:String,w:Number)
{
graphics.lineStyle(2.0, color,0.2);
graphics.drawRect(0, 0, w, 50);
var tf:TextField = new TextField();
tf.defaultTextFormat = new TextFormat("_typeWriter", 20, color, true);
tf.text = text;
tf.autoSize = "left";
tf.x = (this.width - tf.width) / 2;
tf.y = (this.height - tf.height) / 2;
tf.selectable = false;
addChild(tf);
}
}