particle_dot_move_effect2

by t2421 forked from particle_dot_move_effect1 (diff: 70)
1秒ごと方向を変えるパーティクル
♥0 | Line 113 | Modified 2012-09-02 16:15:57 | MIT License
play

ActionScript3 source code

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

// forked from t2421's particle_dot_move_effect1
// forked from t2421's particle_dot_move
// forked from t2421's particle_dot
package {
    import flash.geom.ColorTransform;
    import flash.events.Event;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    public class Main extends Sprite {
        private const HEIGHT:Number = 465;
        private const WIDTH:Number = 465;
        private var _canvas:BitmapData;
        private var _particle:Particle;
        private var _cavnasBM:Bitmap;
        private var _timeTrigger:TimeTrigger;
        public function Main() {
            

            stage.frameRate = 60;
            _canvas = new BitmapData(WIDTH,HEIGHT,false,0x000000);
            _cavnasBM = new Bitmap(_canvas);
            addChild(_cavnasBM);
            _particle = new Particle(100,100);
            _particle.vx = 3;
            _particle.y = 200;
            setTimeTrigger();
            
            addEventListener(Event.ENTER_FRAME,update);
        }
        

        private function setTimeTrigger():void{
            _timeTrigger = new TimeTrigger(1,function():void{
                _particle.vx = Math.random()*6-3;
                _particle.vy = Math.random()*6-3;
            });
            _timeTrigger.frameRate = stage.frameRate;
            _timeTrigger.start();
        }

        
        private function update(e:Event):void{
            _canvas.lock();
            _canvas.colorTransform(_canvas.rect,new ColorTransform(0.9,0.9,0.9));
            _particle.x += _particle.vx;
            _particle.y += _particle.vy;
            _canvas.setPixel(_particle.x,_particle.y,_particle.color);
            checkBounce();
            _canvas.unlock();
        }
        
        private function checkBounce():void{
            if(_particle.x > WIDTH){
                _particle.vx *= -1;
                _particle.x = WIDTH;
            }
            
            if(_particle.x < 0){
                _particle.vx *= -1;
                _particle.x = 0;
            }
            
            if(_particle.y > HEIGHT){
                _particle.vy *= -1;
                _particle.y = HEIGHT;
            }
            
            if(_particle.y < 0){
                _particle.vy *= -1;
                _particle.y = 0;
            }



        }


    }
}

class Particle {
    public var x:Number;
    public var y:Number;
    public var vx:Number = 0;
    public var vy:Number = 0;
    public var color:uint;
    
    public function Particle(x:Number=0,y:Number=0,color:uint=0xfff000){
        this.x = x;
        this.y = y;
        this.color = color;
    }

}

import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.utils.Timer;


class TimeTrigger extends  Sprite{
    private var _interval:Number = 1;
    private var _callback:Function;
    private var _count:uint = 0;
    private var _frameRate:uint;
   
    public function TimeTrigger(interval:Number=1,callback:Function=null){
        _interval = interval;
        _callback = callback;
    }

    public function setParams(interval:Number=1,callback:Function=null):void{
        _interval = interval;
        _callback = callback;
        
    }
    
    public function reset():void{
        this.removeEventListener(Event.ENTER_FRAME,loop);
        _count = 0;
    }

    public function pause():void{
        this.removeEventListener(Event.ENTER_FRAME,loop);
    }
    
    public function start():void{
        trace("startTimer");
        this.addEventListener(Event.ENTER_FRAME,loop);
    }

    private function loop(e:Event):void{
        
        if(_count == _frameRate*_interval){
            _callback();
            _count=0;
        }else{
            _count++;
        }

    }
    
    public function set frameRate(rate:uint):void{
        _frameRate = rate;
    }
}