はじけ飛ぶ何か

by shohei909
LIVE CODING 2010/07/16
黒いもやもや
クリックまたはキーを押すとではじけ飛ぶ
♥1 | Line 117 | Modified 2010-07-16 14:19:25 | MIT License
play

ActionScript3 source code

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

//LIVE CODING 2010/07/16
//黒いもやもや
//クリックまたはキーを押すとではじけ飛ぶ



package {
    import flash.events.*;
    import flash.display.Sprite;
    import com.bit101.components.FPSMeter;
    
    
    public class FlashTest extends Sprite {
        public var map:SmokeMap = new SmokeMap(465,465);
        public function FlashTest() {
            // write as3 code here..
            addChild(map);
            new FPSMeter(this);
            onDown();
            map.create(22, 100, 15 ,28);
            map.create(22, 250, 15 ,28);
            map.create(22, 400, 15 ,28);
            stage.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
           stage.addEventListener(KeyboardEvent.KEY_DOWN,onDown);
        }
        public function onDown(e:Event = null):void{
            map.del()==false
        }
    }
}




import flash.geom.Rectangle;
import flash.filters.BlurFilter;
import flash.geom.Point;
import flash.events.Event;
import flash.display.Bitmap;
import flash.display.BitmapData;


class SmokeMap extends Bitmap{
    public var color:uint = 0xFF000000;
    private var cores:Vector.<Object> = new Vector.<Object>();
    private var points:Vector.<Object> = new Vector.<Object>();
    private var transMap:BitmapData;
    private var rate:Number = 60;
    private var filter:BlurFilter = new BlurFilter(5,5,1);
    private var aliveRect:Rectangle;
    
    
    
    public function SmokeMap(w:int,h:int){
        aliveRect = new Rectangle(-100,-100,w+200,h+200);
        transMap = new BitmapData(w,h,true,0xFF333333);
        super(new BitmapData(w,h,true));
        this.addEventListener( "enterFrame", onFrame );
    }
    
    public function create(x:int,y:int,n:int,w:int=10,r:int = 10):void{
        for(var i:int=0;i<n;i++){
            var core:Object = { x:x+i*w,y:y };
            cores.push( core );
            for(var j:int=0;j<5;j++){
                var randX:Number = (Math.random()*2-1);
                var randY:Number = (Math.random()*2-1);
                points.push( {   
                                 x: core.x+randX*r,
                                 y: core.y+randY*r,
                                 dy: randX*r,
                                 dx: randY*r,
                                 target: core,
                                 chase: true,
                                 life: 40
                              } );
            }
        }
    }
    
    
    
    
    private function onFrame(e:Event):void{
        move();
        drow();
    }
    
    
    private function drow():void{
        var b:BitmapData = bitmapData;
        b.lock();
        
        b.merge(transMap,b.rect,new Point(),100,100,100,256);
        
        var l:int = points.length;
        for(var i:int=l-1;i>-1;i--){
            var p:Object = points[i];
            b.fillRect(new Rectangle(p.x,p.y,15,15),color*p.life/10);
        }
        
        b.applyFilter(b,b.rect,new Point(),filter);
        
        
        b.unlock();
    }
    
    
    private function move():void{
        var l:int = points.length;
        for(var i:int=0;i<l;i++){
            var p:Object = points[i];
            p.x += p.dx;
            p.y += p.dy;
            if(p.chase){
                var core:Object = p.target;
                var rx:Number = core.x-p.x;
                var ry:Number = core.y-p.y;
                var deg:Number = Math.atan2( rx , ry );
                var r:Number = (rx*rx+ry*ry)/100;
                p.dx += Math.sin(deg)*r;
                p.dy += Math.cos(deg)*r;
            }else{
                p.life--;
                if(p.life<0 || bitmapData.rect.contains(p.x,p.y)==false){
                    points.splice(i,1);
                    l--;i--;
                }
            }
        }
    }
    
    public function del(n:int = 0):Boolean{
        var l:int = points.length;
        if(n < cores.length){
            var c:Object = cores[n];
            cores.splice(n,1);
            for(var i:int=0;i<l;i++){
                var p:Object = points[i];
                if(p.target == c){
                    p.chase = false;
                    p.dx *= 5;
                    p.dy *= 5;
                }
            }
            return true;
        }
        return false;
    }
}

Forked