flash on 2015-1-22

by mutantleg
♥0 | Line 74 | Modified 2015-01-22 21:53:28 | 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/lZWc
 */

package {
    import flash.events.MouseEvent;
    import flash.geom.Rectangle;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
          pic = new BitmapData(465, 465, false, 0xFFffFF);  
            
          var i:int; var r:Rectangle;
          r = new Rectangle();
          
          for (i = 0; i < 16; i++)
          {
            r.x = Math.random() * 465; r.y = Math.random()*465;
            r.width = 8+Math.random()*64;
            r.height = 8+Math.random()*64;
            pic.fillRect(r, 0);   
          }  
            
          r.x = 128; r.y = 128;
          r.width = 64; r.height =64;
          pic.fillRect(r, 0);
          
          cx = 128+32;
          cy = 128;  
    
          stage.addEventListener(MouseEvent.CLICK, onClick);  
          stage.addEventListener(Event.ENTER_FRAME, onEnter);  
        }//ctor

        public var pic:BitmapData;        
        
        public function onClick(e:MouseEvent):void { cx = stage.mouseX; cy = stage.mouseY; }
        
        public function isWall(ax:Number, ay:Number):Boolean
        {
            if (ax < 0) { return true; }           if (ay < 0) { return true; }
            if (ax >= 465) { return true; }        if (ay >= 465) { return true; }
            if (pic.getPixel(ax,ay) < 128) { return true; }
            
            return false;
        }//iswall
        
        public var cx:Number = 230;      public var cy:Number = 230;
        public var dx:Number = 1;        public var dy:Number = 0;
        public var rad:Number = 8;
        
        public var gt:int = 0;
        
        public var state:int = 0;
        
        public function onEnter(e:Event):void
        {
            graphics.clear();
            graphics.lineStyle(2, 0);
            
            graphics.beginBitmapFill(pic, null,false,false);
            graphics.drawRect(0,0,465,465);
            graphics.endFill();
            
            graphics.drawCircle(cx,cy, rad);
            graphics.drawCircle(cx+dx*rad,cy+dy*rad, 4);
 
            var tmp:Number;           
            var ax:Number; var ay:Number;
            ax = cx + -dy*rad; ay = cy+dx*rad;
            graphics.lineStyle(2, 0xFF0000);
            graphics.drawCircle(ax,ay,4);

            //check if no ground below
            if (state == 1)
            { if (isWall(ax,ay)) { state = 0; } }
            else   if (state == 0) {
            if (isWall(ax,ay) == false)
            { state = 1; tmp = dx; dx = -dy; dy = tmp; 
                cx += dx * rad; cy += dy * rad;      }  }
 
            //clamp to ground           
            var i:int; 
            if (state == 0)
            if (isWall(ax,ay))      
            { for (i = 0; i < 8; i++)
            { if (isWall(ax+dy,ay-dx)) { cx += dy; cy +=-dx; ax+=dy; ay+=-dx; } } }

            //check if hit wall
            if (isWall(cx,cy) == false)
            if (isWall(cx+dx*rad,cy+dy*rad))
            { tmp = dx; dx = dy; dy = -tmp; }
            
            if (gt % 2 == 0)
            {  cx += dx * rad; cy += dy * rad; }
            
            
            gt += 1; 
      
            
        }//onenter
        
    }//classend
}