flash on 2012-9-19

by mutantleg
♥0 | Line 77 | Modified 2012-09-19 22:52:23 | MIT License
play

ActionScript3 source code

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

package {
    import flash.utils.Proxy;
    import flash.geom.Point;
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        
        
        public var canvas:BitmapData;
        public var pic:Bitmap;        
        
        public function FlashTest() {
            
            canvas = new BitmapData(400,400,false);
            pic = new Bitmap(canvas);
            addChild(pic);
            canvas.fillRect(canvas.rect, 0xFFffFF);
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mdown);
            stage.addEventListener(MouseEvent.MOUSE_UP, mup);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, mmove);
            stage.addEventListener(MouseEvent.MOUSE_OUT, mup);
        }//ctor
        
        public var pmx:Number = 0;
        public var pmy:Number = 0;
        public var mx:Number = 0;
        public var my:Number =0;
        
        public var dest:Point  = new Point();
        public var bMdown:Boolean = false;
        public function mmove(e:MouseEvent):void
        {
            pmx = mx;
            pmy = my;
            mx = this.mouseX;
            my = this.mouseY;
            
            if (bMdown)
            {
            //canvas.setPixel(mx,my, 0);
            line(canvas,pmx,pmy,mx,my,0);
            }//endif
        }//mmove
        
        public function mdown(e:MouseEvent):void
        {
            bMdown = true;
        }//mdown
        
        public function mup(e:MouseEvent):void
        {
            bMdown = false;
        }//mup
        
        //http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm
        public function line(to:BitmapData, x0:int, y0:int, x1:int, y1:int, c:uint = 0):void
        {
            var sx:int;
            var sy:int;
            var dx:int;
            var dy:int;
            var err:int;
            var e2:int;
            
            dx = Math.abs(x0-x1);
            dy = Math.abs(y0 - y1);
            if (x0 < x1) {sx=1;}else {sx=-1;}
            if (y0 < y1) {sy=1;}else {sy =-1;}
            err = dx-dy;
            
            while(true)
            {
                to.setPixel(x0,y0,c);
                if (x0 == x1 && y0 == y1) { return;}
                e2 = err+err; //2*err
                
                if (e2 > -dy)
                {
                    err -= dy;
                    x0  += sx;
                }//endif
                
                if (e2 < dx)
                {
                    err += dx;
                    y0 += sy;
                }//endif
            }//wend
            
        }//line
        
        
    }//classend
}