第一篇文章,关于Sprite的深度排序

       最近在一家创业公司实习做Flash相关的内容,其中遇到个问题是关于2D视角下拖动物体的。这些物体本身都是数据驱动的Sprite,在拖动的时候需要把一些物体放在另一些物体上面。物体的模型数据更改只需要在检测到碰撞时把高度更改一下就好,显示上的更改就涉及到Sprite关于深度的排序问题。

        AS3里面对于Sprite的排序取决于其在父节点下的Index,举例来说:

        我现在有三个Sprite: rootSprite, childSprite1和childSprite2,childSprite1和childSprite2都是rootSprite的children。其中childSprite1的index是0,childSprite2的index是1。那么在绘制时childSprite2就会画在前景,即可能挡住childSprite1的内容。如果我想要让childSprite1位于前景,就需要改变两者的index顺序。

        根据Adobe的API参考文献,在DisplayObjectContainer类(Sprite继承该类)下面提供了几个方法可以用于改变children的index:

       

       public function setChildIndex(child:DisplayObject, index:int):void

       该方法是将child移动到index的位置。举例来说:如果我有5个child,分别叫child_0 - child_4,其对应的index从0到4 。如果我调用root.setChildIndex(child_1,3),那么调用之后他们的index则分别为 0 3 1 2 4。也就是说,该方法是将child移动到index位置之后,该child和原index位置的child之间的所有child的index都会发生改变。

      

       public function swapChildrenAt(index1:int, index2:int):void

       public function swapChildren(child1:DisplayObject, child2:DisplayObject):void

       这两个方法都是将两个child的位置直接交换而不影响其他child的index。还是以上例,如果我调用root.setChildIndex(child_1,3),那么调用之后他们的index则分别为 0 3 2 1 4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值