类似“图标自动排列”的算法(Flash AS3数组技巧实例)

闪吧朋友的提问

window桌面图标勾选自动排列后,拖动图标,可自动更新位置。底下有附件

Main.as:

  
  
  
  
  1. package   
  2. {  
  3.     import flash.display.Sprite;  
  4.     import flash.display.MovieClip;  
  5.     import flash.text.TextField;  
  6.     import flash.events.MouseEvent;  
  7.  
  8.     /*  
  9.     改变对象位置,类似于window自动排列图标    [实例]  
  10.     created by hyieq  
  11.     http://hyieq.blog.51cto.com  
  12.     2011-4-17  
  13.     */  
  14.     public class Main extends Sprite  
  15.     {  
  16.  
  17.         private var num:int = 16;  
  18.         private var id:Array=new Array();  
  19.         private var box:Array=new Array();  
  20.         private var tempPic,p1:int,p2:int;//用来标记被拖动的图片和目的  
  21.           
  22.         public function Main()  
  23.         {  
  24.             createBox();  
  25.             setPosition();  
  26.         }  
  27.         private function createBox()  
  28.         {  
  29.             var i:int = 0,j:int = 0;  
  30.             for (i; i<num; i++)  
  31.             {  
  32.                 id[i] = new Array(int(i / 4),i % 4);//基本排列算法  
  33.                   
  34.                 var pic:MovieClip = new MovieClip  ;  
  35.                 pic.graphics.beginFill(0xcc9900+16*i,1);  
  36.                 pic.graphics.drawRect(-25,-25,50,50);  
  37.                 pic.graphics.endFill();  
  38.                   
  39.                 var txt:TextField=new TextField();  
  40.                 txt.height = 50;  
  41.                 txt.width = 50;  
  42.                 txt.x = -25;  
  43.                 txt.y = -25;  
  44.                 txt.text = i + "\n" + id[i][0] + "," + id[i][1];  
  45.                 txt.scaleX=txt.scaleY=1.5  
  46.                 txt.selectable = false;  
  47.                   
  48.                 addChild(pic);  
  49.                 pic.addChild(txt);  
  50.                 box.push(pic);  
  51.                 pic.mouseChildren = false;//不然文本框会影响MouseEvent。  
  52.                 this.addEventListener(MouseEvent.MOUSE_UP,mouseup)  
  53.             }  
  54.         }  
  55.         private function setPosition()  
  56.         {  
  57.             var i:int = 0;  
  58.             for (i; i<num; i++)  
  59.             {  
  60.                 box[i].x = id[i][1] * 100 + 50;  
  61.                 box[i].y = id[i][0] * 100 + 50;  
  62.                 box[i].n=i;//手动添加属性n来标记哪块pic被点击了。  
  63.                 box[i].addEventListener(MouseEvent.MOUSE_DOWN,mousedown);  
  64.             }  
  65.         }  
  66.         private function mousedown(e:MouseEvent)  
  67.         {  
  68.             tempPic=e.target;  
  69.             p1=tempPic.n;//记下当前按下鼠标的那个方块序号p1  
  70.             tempPic.startDrag();  
  71.         }  
  72.         private function mouseup(e:MouseEvent){  
  73.             tempPic.stopDrag();  
  74.             //这个鼠标位置判断很关键:  
  75.             var tx:int=int((mouseX)/100);  
  76.             var ty:int=int((mouseY)/100);  
  77.             var i:int=0;  
  78.             for(i;i<num;i++){  
  79.                 if(id[i][0]==ty && id[i][1]==tx){  
  80.                     p2=i;//记下鼠标放开所在位置的序号p2,可能这个比较不容易想到。  
  81.                 }  
  82.             }  
  83.             //这样一来就取得了被拖动pic的序号p1以及目的序号p2,于是就方便了对id数组的变换。  
  84.             changePicArray();  
  85.         }  
  86.         private function changePicArray(){  
  87.             //调换pic在box中的序列:  
  88.             var i:int,temp;  
  89.             if(p1<p2){  
  90.                 temp =box[p1];  
  91.                 for(i=p1;i<p2;i++){  
  92.                     box[i]=box[i+1];  
  93.                 }  
  94.                 box[p2]=temp;  
  95.             }else if(p1>p2){  
  96.                 temp=box[p1];  
  97.                 for(i=p1;i>p2;i--){  
  98.                     box[i]=box[i-1];  
  99.                 }  
  100.                 box[p2]=temp;  
  101.             }  
  102.             setPosition();  
  103.         }  
  104.  
  105.     }  
  106.  

 

你可能感兴趣的:(数组,as3,自动排列,图片排列,数组技巧)