flash on 2011-2-17

by yama3
♥0 | Line 84 | Modified 2011-02-17 18:11:28 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.display.Shape;
    import flash.display.Graphics;
    
    [SWF(width="465", height="465", frameRate="60")]
    
    public class FlashTest extends Sprite {
        
        private var _particles:Vector.<Particle>;
        private var step:int;
        private var canvasshape:Shape;
        
        public function FlashTest() {
            if(stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);            
        }
        
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
            canvasshape = new Shape();
            addChild(canvasshape);
            
            _particles = new Vector.<Particle>();
            addEventListener(Event.ENTER_FRAME, EnterFrameHandler);
        }
        
        private function AddParticle():void
        {
            var p:Particle = new Particle();
            p.x = Math.random() * WIDTH;
            p.z = Math.random() * HEIGHT / 2 + HEIGHT / 2;
            _particles.push(p);
        }
        
        private function EnterFrameHandler(e:Event):void
        {
            var g:Graphics = canvasshape.graphics;
            g.clear();
            g.lineStyle(1, 0);
            
            var pnum:int = _particles.length;
            for(var i:int = pnum - 1; i >= 0; i--) {
                _particles[i].Move(mouseX, mouseY);
                if(_particles[i].life == 0) _particles.splice(i, 1);
                else
                {
                    g.drawCircle(_particles[i].x, _particles[i].z - _particles[i].y, 5-(_particles[i].life / Particle.LIFE_MAX)*4);
                }
            }
            AddParticle();
        }
    }
}

const WIDTH:int = 465;
const HEIGHT:int = 465;

class Particle {
    public static const LIFE_MAX:int = 2000;
    public var x:Number;
    public var y:Number;
    public var z:Number;
    
    public var rolPower:Number;
    public var upPower:Number;
    public var life:Number;
    
    public function Particle() {
        life = LIFE_MAX;
        rolPower = 100;
        upPower = 0;
        x = 0;
        y = 0;
        z = 0;
    }
    
    public function Move(tx:Number, tz:Number):void
    {
        var sin:Number = Math.sin((45 + rolPower) / 180 * Math.PI);
        var cos:Number = Math.cos((45 + rolPower) / 180 * Math.PI);
        rolPower *= 0.999;
        
        var vecX:Number = (x-tx);
        var vecZ:Number = (z-tz);
        var vx:Number = vecX * cos + vecZ * -sin;
        var vz:Number = vecX * sin + vecZ * cos;
        var r:Number = Math.sqrt(vx * vx + vz * vz);
        
        vx /= r;
        vz /= r;
        
        x += vx * 4 * 5;
        z += vz * 1 * 5;
        
        y += upPower;
        upPower += 0.001;
        
        if(life > 0) life--;
    }


}