flash on 2015-2-9

by mutantleg
♥0 | Line 106 | Modified 2015-02-09 07:00:47 | 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/prt5
 */

package {
    import flash.ui.Keyboard;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.geom.Matrix;
    import flash.events.Event;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
            
            pic = new BitmapData(32, 32, false, 0);
            
            
            cx = 15;
            cy = 15;
            
            pic.setPixel(14,16, 0xFF);
            pic.setPixel(15,16, 0xFF);
            pic.setPixel(16,16, 0xFF);
            pic.setPixel(17,16, 0xFF);
            pic.setPixel(18,16, 0xFF);
            
            stage.addEventListener(KeyboardEvent.KEY_UP, onKup);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKdown); 
            stage.addEventListener(MouseEvent.MOUSE_DOWN, onMdown);
            stage.addEventListener(MouseEvent.MOUSE_UP, onMup);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
        }//ctor
        
        public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512, false);
        public function onKdown(e:KeyboardEvent):void { vecKey[e.keyCode] = true; }
        public function onKup(e:KeyboardEvent):void { vecKey[e.keyCode] = false; }
        public function isKeyDown(k:int):Boolean { return vecKey[k]; }    
        public function onMdown(e:MouseEvent):void { mdown = 1; }
        public function onMup(e:MouseEvent):void { mdown = 0; }        
        public var mdown:int = 0;
        
        public var pic:BitmapData;
        public var mat:Matrix = new Matrix();
        
        public var cw:Number = 16;
        public var ch:Number = 16;
        
        public var cx:int = 0;
        public var cy:int = 0;
        
        public var gt:int = 0;
        
        public function isWall(ax:int, ay:int):Boolean
        { return pic.getPixel(ax,ay) > 0; }
        
        public var mode:int = 0;
        public var it:int = 0;
        public var vecMode:Vector.<int> = Vector.<int>([-1,-1,-1,-1,-1,-1,0,0,0,1,1,1]);
        
        public function onEnter(e:Event):void
        {
            var mx:Number; var my:Number;
            var tx:int; var ty:int;            

            gt += 1;

            mx = stage.mouseX; my = stage.mouseY;
            tx = Math.floor(mx/cw);  ty = Math.floor(my/ch);
            
            
            if (gt % 2 == 0)
            {
             var vx:int;    var vy:int;
             vx = 0; vy = 0;
           //  if (isKeyDown(Keyboard.UP)) { vy-= 1; }
           //  if (isKeyDown(Keyboard.DOWN)) { vy+= 1; }
             if (isKeyDown(Keyboard.LEFT)) { vx-= 1; }
             if (isKeyDown(Keyboard.RIGHT)) { vx+= 1; }
             if (isKeyDown(Keyboard.UP) && mode == 0) { mode = 1; it = 0; }
 
             if (mode == 1)
             {
               vy = vecMode[it];
               it +=1; if (it>=vecMode.length) { it =0; mode=0;}   
             } else  { vy = 1; }
 
 /*
            if (isWall(cx+vx,cy) && isWall(cx+vx+vx,cy-1) == false)
             { for (i =0; i <4;i++) { if (isWall(cx+vx+vx,cy-i-1)) {break;} }
               if (i >= 4) { cx+=vx; cy -=1; return; }
             }
 */
 
             //slopes (stairs)
             if (mode == 0) //not jumping
             if (vx < 0)
             if (isWall(cx+vx,cy))
             if (isWall(cx+vx,cy-1) == false)               
             { 
              for (i =0; i <4;i++)  { if (isWall(cx+vx,cy-i-1) ) { vx =0; break;} }
              if (i >=4) {cx+=vx; cy-=1; vx = 0; }
             }//endif2
             
             if (vx > 0)
             if (isWall(cx+vx+1,cy))
             if (isWall(cx+vx+1,cy-1) == false)
             { 
              for (i =0; i <4;i++)  { if (isWall(cx+vx+1,cy-i-1) ) { vx =0; break;} }
              if (i >=4) {cx+=vx; cy-=1; vx = 0; }
             }//endif2
             
             //wallcheck
             var i:int;
             for (i =0; i <4;i++)
             {if (isWall(cx+vx,cy-i) ) { vx =0; break;}
              if (isWall(cx+1+vx,cy-i)  ) { vx =0; break; }  }           
             cx += vx; 

            //floor/ceil checks 
             if (isWall(cx,cy+vy) || isWall(cx+1,cy+vy) )  {  vy =0; }
             if (isWall(cx,cy+vy-3)|| isWall(cx+1,cy+vy-3) )  {  vy =0; if (mode==1) { mode =0;} }
             cy += vy;
            
            }//endif
            
            mat.a = cw;        mat.d = ch;

            if (mdown > 0) { pic.setPixel(tx,ty, 0xFF); }
            
            graphics.clear();
            graphics.beginBitmapFill(pic, mat,false, false);
             graphics.drawRect(0,0,465,465);
            graphics.endFill();

            graphics.lineStyle(2, 0x00FF00,0.5);
            graphics.drawRect(tx*cw,ty*ch,cw,ch);
            
            graphics.lineStyle(2, 0xFF0000);
            graphics.drawRect(cx*cw,cy*ch, cw, ch);
            graphics.drawRect(cx*cw+cw,cy*ch, cw, ch);
            graphics.drawRect(cx*cw,cy*ch-ch, cw, ch);
            graphics.drawRect(cx*cw+cw,cy*ch-ch, cw, ch);
            graphics.drawRect(cx*cw,cy*ch-ch*2, cw, ch);
            graphics.drawRect(cx*cw+cw,cy*ch-ch*2, cw, ch);
            graphics.drawRect(cx*cw,cy*ch-ch*3, cw, ch);
            graphics.drawRect(cx*cw+cw,cy*ch-ch*3, cw, ch);
            
  
            
        }//onenter
        
        
    }//classend
}