AS3的深度管理及排序

AS3的深度管理及排序 
感谢:Moondy’s Zone 
http://www.moondyzone.com 
AS3中,我们通过下面的方法来操作和管理物体的显示深度排序。 

Java代码  收藏代码
  1. numChildren : int  
  2. //返回此对象的子项数目。  
  3. getChildAt(index:int):DisplayObject  
  4. //返回位于指定索引处的子显示对象实例。  
  5. getChildIndex(child:DisplayObject):int  
  6. //返回 DisplayObject 的 child 实例的索引位置。  
  7. setChildIndex(child:DisplayObject, index:int):void  
  8. //更改现有子项在显示对象容器中的位置。  
  9. swapChildren(child1:DisplayObject, child2:DisplayObject):void  
  10. //交换两个指定子对象的 Z 轴顺序(从前到后顺序)。  
  11. swapChildrenAt(index1:int, index2:int):void  
  12. //在子级列表中两个指定的索引位置,交换子对象的 Z 轴顺序(前后顺序)。  
  13. removeChildAt(index:int):DisplayObject  
  14. //从 DisplayObjectContainer 的子列表中指定的 index 位置删除子 DisplayObject。  


下面是这样一个例子:有四个圆,可以点击与拖动,实现每点击其中一个圆,就把它调到最上面来。 


代码如下: 

Java代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="400" xmlns:myCanvas3D="myCanvas3D.*" applicationComplete="init();">  
  3.     <mx:Script>  
  4.         <![CDATA[  
  5.             private var color_a:Array=[0xFF0000,0xFFFF00,0x0000FF,0x00FF00];  
  6.             private var pos:Array=[[200,150],[150,200],[250,200],[200,250]];  
  7.             private var block_mc:Sprite;  
  8.             private var block_box:Sprite;  
  9.               
  10.             private function init():void{  
  11.                 block_box=new Sprite();  
  12.                 mycanvas.canvas.addChild(block_box);  
  13.                   
  14.                 for (var i=0; i<color_a.length; i++) {  
  15.                     block_mc=new Sprite;  
  16.                     block_mc.graphics.lineStyle();  
  17.                     block_mc.graphics.beginFill(color_a[i]);  
  18.                     block_mc.graphics.drawCircle(0,0,50);  
  19.                     block_mc.graphics.endFill();  
  20.                     block_mc.x=pos[i][0];  
  21.                     block_mc.y=pos[i][1];  
  22.                     block_mc.buttonMode=true;  
  23.                     block_mc.addEventListener(MouseEvent.CLICK,change_depth);  
  24.                     block_mc.addEventListener(MouseEvent.MOUSE_DOWN,drag_item);  
  25.                     block_mc.addEventListener(MouseEvent.MOUSE_UP,nodrag_item);  
  26.                     block_box.addChild(block_mc);  
  27.                 }  
  28.             }  
  29.             private function change_depth(e:MouseEvent){  
  30.                 var obj=e.target;  
  31.                 block_box.setChildIndex(obj,block_box.numChildren-1);  
  32.             }  
  33.             private function drag_item(e:MouseEvent){  
  34.                 e.target.startDrag();  
  35.             }  
  36.             private function nodrag_item(e:MouseEvent){  
  37.                 stopDrag();  
  38.             }  
  39.         ]]>  
  40.     </mx:Script>  
  41.     <myCanvas3D:Canvas3D id="mycanvas" width="400" height="400" backgroundColor="0xCCCCCC">  
  42.           
  43.     </myCanvas3D:Canvas3D>  
  44. </mx:Application>  



这个其实很简单,要调整到最上层的话,只要用setChildIndex把鼠标点击对象的深度值设为(容器.numChildren-1)就可以啦。setChildIndex常用有以下几种: 

Java代码  收藏代码
    1. 置顶:  
    2. 容器.setChildIndex(对象A,容器.numChildren-1);  
    3. 置底:  
    4. 容器.setChildIndex(对象A,0);  
    5. 插入对象B的前面:  
    6. 容器.setChildIndex(对象A,容器.getChildIndex(对象B));  
    7. 插入对象B的后面:  
    8. 容器.setChildIndex(对象A,容器.getChildIndex(对象B)-1);  
posted @ 2012-05-21 01:42  rob_2010  阅读(483)  评论(0编辑  收藏  举报