flash on 2016-8-5

by mutantleg
♥0 | Line 99 | Modified 2016-08-05 11:30:42 | 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/KpW9
 */

package {
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;
    import flash.geom.Rectangle;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
         skin = new BitmapData(465,465, false, 0x808080);
         var i:int; var r:Rectangle; r = new Rectangle();
         for (i=0;i<128;i+=1)
         { r.x=Math.random()*465; r.y=Math.random()*465;
           r.width=8+Math.random()*52; r.height=8+Math.random()*52;
          skin.fillRect(r, 0);  }
         r.x= 220;r.y=220;r.width=64; r.height=64;
         skin.fillRect(r,0); 
         stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown);
         stage.addEventListener(KeyboardEvent.KEY_UP, onKup); 
         stage.addEventListener(Event.ENTER_FRAME, onEnter);   
        }//ctor
        
        public function onKup(e:KeyboardEvent):void  { vecKey[e.keyCode] = false;  }
        public function onKdown(e:KeyboardEvent):void  { vecKey[e.keyCode] = true;  }
        public function isKey(k:int):Boolean { return vecKey[k]; }
        public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false);
        
        public var skin:BitmapData;
        public var cx:Number = 230;
        public var cy:Number = 230;
        public var vx:Number = 0;
        public var vy:Number = 0;
        public var ang:Number = 1.57;
        
        public function isWall(ax:Number, ay:Number):Boolean
        { return skin.getPixel(ax,ay) > 0; }
        
        public function isStuck(ax:Number, ay:Number):Boolean
        {
          if (isWall(ax,ay)) { return true; }
          if (isWall(ax+8,ay) == false) { return false; }
          if (isWall(ax-8,ay) == false) { return false; }
          if (isWall(ax,ay+8) == false) { return false; }
          if (isWall(ax,ay-8) == false) { return false; }
          return true;
        }//isstuck
        
        public function onEnter(e:Event):void
        {
          graphics.clear();
          graphics.lineStyle(2, 0);
          graphics.beginBitmapFill(skin, null,false,false);
           graphics.drawRect(0,0,465,465);
          graphics.endFill();
            
          
          //var vx:Number; var vy:Number;
          var ms:Number;
          ms = 0.2;
         // vx=0; vy=0;
          vx *=0.9; vy*=0.9; 
        
          var ta:Number;
          ta = ang;
          vx += Math.cos(ta)*ms;
          vy += Math.sin(ta)*ms;
          
          ms = 4;
          if (isKey(69)) {cx = stage.mouseX; cy=stage.mouseY; vx=0;vy=0;}
          if (isKey(70)) { ang = Math.atan2(stage.mouseY-cy, stage.mouseX-cx);  }
          if (isKey(Keyboard.RIGHT)) { vx=ms;  }
          if (isKey(Keyboard.LEFT))  { vx=-ms;  }
          if (isKey(Keyboard.DOWN)) { vy=ms;  }
          if (isKey(Keyboard.UP))   { vy=-ms;  }

          
          if (isStuck(cx+vx, cy+vy) == true)
          {
            if (isStuck(cx+vx,cy) == false)  { vy = 0; }   
            else if (isStuck(cx,cy+vy)==false) { vx = 0; }
            else { vx=0; vy=0; }
          }//endif
          cx+=vx; cy+=vy;

          graphics.lineStyle(1, 0xFFffFF);

          var wx:Number; var wy:Number;          
          var ax:Number; var ay:Number;
          var i:int; var k:int;
          ax = cx; ay =cy;
          wx=0;wy=0; k=0;;
          for (i=0;i<16;i+=1)
          {
             ax += Math.cos(ta);
             ay += Math.sin(ta);
             if (isWall(ax,ay))
             { wx -= Math.cos(ta); 
               wy -= Math.sin(ta);
               k+=1; if (k>=4){break;}  }             
           //  graphics.drawCircle(ax,ay,4);  
          }//nexti
          graphics.moveTo(cx,cy);
          graphics.lineTo(ax,ay);
          
          if (isStuck(cx+wx, cy+wy) == true)
          {
            if (isStuck(cx+wx,cy) == false)  { wy = 0; }   
            else if (isStuck(cx,cy+wy)==false) { wx = 0; }
            else { wx=0; wy=0; }
          }//endif
          cx+=wx; cy+=wy;

          graphics.lineStyle(2,0xFFffFF);  
          graphics.drawCircle(cx,cy, 4);  
            
        }//onenter
        
    }//classend
}