flash on 2015-11-26

by mutantleg
♥0 | Line 97 | Modified 2015-11-26 06:53:45 | 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/CytV
 */

package {
    import flash.text.TextField;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        public function FlashTest() {
         
          deb = new TextField();
          deb.width=320;deb.height=240;
          deb.mouseEnabled=false;
          addChild(deb);
         
          var i:int; var num:int; var a:xActor;
         
          vecAct = new Vector.<xActor>(0, false);

          num = 256;
          for(i=0;i<num;i+=1)
          {
            a = new xActor(); vecAct.push(a);
            a.hp = 16+Math.random();
            a.tx = Math.random()*mw;
            a.ty = Math.random()*mh;
            a.vx=Math.random() < 0.5 ? 1:-1;
            a.vy=Math.random() < 0.5 ? 1:-1;   
          }//nexti         
         
          stage.addEventListener(Event.ENTER_FRAME, onEnter);   
        }//ctor
        
        public var deb:TextField;
        
        public var mw:int = 16;
        public var mh:int = 16;
        public var cw:Number = 32;
        public var ch:Number = 32;
        public var vecGrid:Vector.<int>=new Vector.<int>(16*16,false);
        public var actGrid:Vector.<xActor>=new Vector.<xActor>(16*16,false);
        public var vecAct:Vector.<xActor>;
        public var gt:int = 0;
        public var wait:int =0;

        

        public function setAct(ax:int, ay:int, a:xActor):void
        {  if(ax<0||ay<0||ax>=mw||ay>=mh){return;} actGrid[ax+(ay*mw)]=a;  }

        public function getAct(ax:int, ay:int):xActor
        {  if(ax<0||ay<0||ax>=mw||ay>=mh){return null;} return actGrid[ax+(ay*mw)];  }

        public function onEnter(e:Event):void
        {
            wait+=1;  if(wait<8){return;} wait =0;
    
            deb.text = ""+vecAct.length;
            
           graphics.clear();
           graphics.lineStyle(2,0);     
            
           var num:int; var a:xActor;
           var i:int; var k:int;
           var yt:int; var t:int;

           num =vecAct.length;
           for (i=0;i<num;i+=1)
           {
             a = vecAct[i];
             setAct(a.tx,a.ty,null);
                     
             if (a==null || a.hp<0) {                 
               for (k=i;k<num-1;k+=1)  { vecAct[k]=vecAct[k+1]; }   
               vecAct.pop(); num-=1; i-=1;
               continue;
             }//endif
              
              var b:xActor;
              b = getAct(a.tx+a.vx,a.ty+a.vy);
              if (b!=null){b.hp=-1;}

              a.tx+=a.vx; a.ty+=a.vy;               
              if (a.vx<0&&a.tx<0){a.tx=0;a.vx*=-1;}
              if (a.vx>0&&a.tx>=mw){a.tx=mw-1;a.vx*=-1;}         
              if (a.vy<0&&a.ty<0){a.ty=0;a.vy*=-1;}
              if (a.vy>0&&a.ty>=mh){a.ty=mh-1;a.vy*=-1;}                   
          
             setAct(a.tx,a.ty, a);
           }//nexti

            
           for(i=0;i<mh;i+=1)
           {
             yt = i * mw;
             for (k=0;k<mw;k+=1)
             {  
               t = vecGrid[yt+k];
               graphics.drawRect(k*cw,i*ch,cw,ch);
               a = actGrid[yt+k];
               if (a != null) {
                   graphics.beginFill(a.col, 1);
                    graphics.drawCircle(k*cw+cw*0.5,i*ch+ch*0.5,8); 
                   graphics.endFill();  
               }//endif
             }//nextk  
           }//nexti 
            
            gt +=1;
            
        }//onenter


    }//classend
}

internal class xActor
{
  public var tx:int = 0;
  public var ty:int = 0;     
  public var hp:Number = -1;
  public var vx:int = 0;
  public var vy:int = 0;  
  public var col:uint = Math.random()*0xffFFffFF;
  public var spec:int = 0;
}//xact