flash on 2013-1-24

by mutantleg
♥0 | Line 238 | Modified 2013-01-24 20:37:11 | 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/chvO
 */

package {
    import flash.ui.Keyboard;
    import flash.text.TextField;
    import flash.events.MouseEvent;
    import flash.events.KeyboardEvent;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.display.Sprite;
    
      [SWF(width="400", height="400",frameRate="60", backgroundColor="#FFFFFF")]
    
    public class FlashTest extends Sprite {
       
        public var vecMap:Vector.<int>;
        public var mwidth:int = 0;
        public var mheight:int = 0;
        
        public var vecTile:Vector.<Rectangle>;
        public var numTile:int = 0;
        public var bmTile:BitmapData;
        
        public var pic:Bitmap;
        public var canvas:BitmapData;
       
           public var deb:TextField;
       
        public function FlashTest() {

            deb = new TextField();
            //addChild(deb);
            deb.textColor = 0xFFffFFff;
            
          initTile();  
            
            canvas = new BitmapData(200,200, false,0);
           pic = new Bitmap(canvas);
           addChild(pic); 
            pic.scaleX = 2;
            pic.scaleY = 2;
            
            addChild(deb);
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mdown);
            stage.addEventListener(MouseEvent.MOUSE_UP, mup);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, kdown);
            stage.addEventListener(KeyboardEvent.KEY_UP, kup);
            stage.addEventListener(Event.ENTER_FRAME, onEnter);
            
        }//ctor
        
        public var vecKey:Vector.<Boolean> = new Vector.<Boolean>(512,false);
        
        public function kdown(e:KeyboardEvent):void { vecKey[e.keyCode]=true; }
        public function kup(e:KeyboardEvent):void { vecKey[e.keyCode] =false;}
        
        public function mdown(e:MouseEvent):void { bMdown = true;}
        public function mup(e:MouseEvent):void { bMdown = false;}
        
        public var bMdown:Boolean = false;
        public var px:Number = 0;
        public var py:Number = 0;
        public var camx:Number = 0;
        public var camy:Number = 0;
        
        public var pmx:Number = 0;
        public var pmy:Number = 0;
        public var mx:Number = 0;
        public var my:Number = 0;
        
        public function onEnter(e:Event):void
        {
            pmx = mx;
            pmy = my;
            mx = pic.mouseX;
            my = pic.mouseY;
            
            
            if (vecKey[Keyboard.A]) { camx -= 16; }
            if (vecKey[Keyboard.D]) { camx += 16; }
            if (vecKey[Keyboard.W]) { camy -= 16; }
            if (vecKey[Keyboard.S]) { camy += 16; }
            
            var worldw:Number;
            var worldh:Number;
            
            worldw = mwidth*8;
            worldh = mheight*8;
            
            if (camx < 0) { camx = 0;}
            if (camx > worldw-200) { camx = worldw-200;}
            if (camy < 0) { camy = 0;}
            if (camy > worldh-200) { camy = worldh - 200;}
            
            
         //   camx = 64; //mouseX/8;
        //    camy = 64; //mouseY/8;
            
           canvas.lock();
                canvas.fillRect(canvas.rect,(0) );
                drawMapBmap2(camx, camy,canvas);
                
                canvas.setPixel(mx,my,0xFFffFFff);
                
                canvas.setPixel(px-camx,py-camy, 0xFF0000);
                canvas.setPixel(px+1-camx,py-camy, 0xFF0000);
                canvas.setPixel(px-camx,py+1-camy, 0xFF0000);
                canvas.setPixel(px+1-camx,py+1-camy, 0xFF0000);
                
                
            canvas.unlock();
            
          //  setTileLine(0,0,400,400,1);
            
            if (bMdown)
            {
             //    setTile(mx+camx, my+camy, 1);
            
                setTileLine(pmx+camx,pmy+camy,mx+camx,my+camy, 1);
            
            }//endif
            
            
            
        }//onenter
        
        public function setTileLine(sx:Number, sy:Number,
        ex:Number, ey:Number, t:int):void
        {
            var kx:Number;
            var ky:Number;
            var vx:Number;
            var vy:Number;
            var mag:Number;
            var u:Number;
            var it:Number;
            
            vx = ex - sx;
            vy = ey - sy;
            mag = Math.sqrt(vx*vx+vy*vy);
            if (mag == 0) 
            {
                 setTile(sx,sy,t);   
                 return; 
            }//endif
            
            u = 8/mag;
            
           // deb.text = " " +u; 
            
            for (it = 0.0; it < 1.0; it+=u)
            {
                kx = sx + (ex-sx) *it;
                ky = sy + (ey-sy) *it;
                setTile(kx, ky, t);
               // canvas.setPixel(kx-camx, ky-camy, 0xFFffFFff);
               // canvas.setPixel(kx+1-camx, ky+1-camy, 0xFFffFFff);
                
            }//nexti
            
            setTile(sx,sy,t);
            setTile(ex,ey,t);
            
        }//settileline
        
        
        public function setTile(wx:Number, wy:Number, t:int):void
        {
            var tx:int;
            var ty:int;
            
            tx = wx / 8;
            ty = wy / 8;
            
            if (tx < 0) { return; }
            if (tx >= mwidth) { return; }
            if (ty < 0) { return; }
            if (ty >= mheight) { return; }
            
           
            vecMap[tx + (ty*mwidth)] = t;
            
        }//settile
        
       
       public function initTile():void
       {
             var i:int;
           var num:int;
           
           mwidth = 64;
           mheight = 64;
           
           num = mwidth*mheight;
           
           vecMap = new Vector.<int>(num, false);
      
           for (i = 0; i < num; i++)
           {
               //vecMap[i] = Math.random() * 4;
               vecMap[i] = 0;
               
           
           }//nexti
           
           loadMap(testMap, testw, testh);
           
           vecTile = new Vector.<Rectangle>(256, false);
           vecTile[0] = new Rectangle(0,0,8,8);
           vecTile[1] = new Rectangle(8,0,8,8);
           vecTile[2] = new Rectangle(16,0,8,8);
           vecTile[3] = new Rectangle(24,0,8,8);
           numTile = 4;
           
           bmTile = new BitmapData(32,32, false ,0);
           bmTile.fillRect(vecTile[0], 0xFF000000);
           bmTile.fillRect(vecTile[1], 0xFFff00);
           bmTile.fillRect(vecTile[2], 0x00ff00);
           bmTile.fillRect(vecTile[3], 0x0000ff);
           
           var tempt:BitmapData;
           tempt = new BitmapData(8,8, false, 0);
           tempt.noise(12);
           bmTile.copyPixels(tempt, tempt.rect, new Point(8,0) );
           
           
       }//inittile
       
        public var crect:Rectangle = new Rectangle(0,0,8,8);
        
        public function drawMapBmap2(cx:Number, cy:Number, bm:BitmapData):void
        {
            var sx:int;
            var sy:int;
            var ex:int;
            var ey:int;
            var w:Number;
            var h:Number;
            
            w = bm.width;
            h = bm.height;
            
            sx = Math.floor(cx/8);
            sy = Math.floor(cy/8);
            ex = sx + Math.ceil(w/8)+1;
            ey = sy + Math.ceil(h/8)+1;
            
            drawMapBmap(cx,cy,sx,sy,ex,ey, bm);
            
        }//drawbmap2
        
        public var dp:Point = new Point(0,0);
        public function drawMapBmap(cx:Number, cy:Number,
        sx:int, sy:int, ex:int, ey:int, bm:BitmapData):void
        {
            var i:int;
            var k:int;
            var yt:int;
            var t:int;
            var wt:Rectangle;
            
            if (sy < 0) { sy = 0;}
            if (sy > mheight) { return; }
            if (sx < 0) { sx = 0;}
            if (sx > mwidth) { return;}
            if (ex < 0) { return; }
            if (ex > mwidth) { ex = mwidth;}
            if (ey < 0) { return; }
            if (ey > mheight) { ey = mheight; } 
            
            for ( i = sy; i < ey; i++)
            {
                yt = i * mwidth;
                
                for (k = sx; k < ex; k++)
                {
                    t = vecMap[yt+k];
                    if (t <= 0) { continue; }
                    if ( t >= numTile) { continue;} 
          
                        
                       dp.x = (k*8)-cx;
                       dp.y = (i*8)-cy;
                         
                       wt = vecTile[t];
                       bm.copyPixels(bmTile, wt, dp); 
     
                }//nextk
            }//nexti
            
            
        }//drawbmap
        
        public function loadMap(m:Array, mw:int, mh:int):void
        {
            var i:int;
            var num:int;
            
            if (m.length != mw*mh) { return; }
            
            mwidth =mw;
            mheight = mh;
            num = mwidth*mheight;
            
            vecMap = new Vector.<int>(num,false);
            for (i=0; i<num; i++)
            { 
              vecMap[i] = m[i]; 
            
               if (vecMap[i] == 128)
               { 
                 px = (i % mwidth) * 8;
                 py = (i / mwidth) * 8;
                 vecMap[i] = 0;
               }//endif
            
            }//nexti
            
            
        }//loadmap
        
        
        public var testw:int = 14;
        public var testh:int = 10; 
        public var testMap:Array = 
        [1,1,1,1,1,1,1,1,1,1,1,1,1,1,
         1,0,0,0,0,0,1,1,1,1,1,1,1,1,
         1,0,0,0,0,0,1,1,1,1,1,1,1,1,
         1,0,0,128,0,0,1,1,1,1,1,1,1,1,
         1,0,0,0,0,0,1,1,1,1,1,1,1,1,       
         1,1,1,1,1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,1,1,1,1,
         1,1,1,1,1,1,1,1,1,1,1,1,1,1
                
        ];
        
        
        
        
    }//classend
}