`

AS3的深度管理及排序

阅读更多
AS3的深度管理及排序
感谢:Moondy’s Zone
http://www.moondyzone.com
AS3中,我们通过下面的方法来操作和管理物体的显示深度排序。
numChildren : int
//返回此对象的子项数目。
getChildAt(index:int):DisplayObject
//返回位于指定索引处的子显示对象实例。
getChildIndex(child:DisplayObject):int
//返回 DisplayObject 的 child 实例的索引位置。
setChildIndex(child:DisplayObject, index:int):void
//更改现有子项在显示对象容器中的位置。
swapChildren(child1:DisplayObject, child2:DisplayObject):void
//交换两个指定子对象的 Z 轴顺序(从前到后顺序)。
swapChildrenAt(index1:int, index2:int):void
//在子级列表中两个指定的索引位置,交换子对象的 Z 轴顺序(前后顺序)。
removeChildAt(index:int):DisplayObject
//从 DisplayObjectContainer 的子列表中指定的 index 位置删除子 DisplayObject。

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


代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="400" xmlns:myCanvas3D="myCanvas3D.*" applicationComplete="init();">
	<mx:Script>
		<![CDATA[
			private var color_a:Array=[0xFF0000,0xFFFF00,0x0000FF,0x00FF00];
			private var pos:Array=[[200,150],[150,200],[250,200],[200,250]];
			private var block_mc:Sprite;
			private var block_box:Sprite;
			
			private function init():void{
				block_box=new Sprite();
				mycanvas.canvas.addChild(block_box);
				
				for (var i=0; i<color_a.length; i++) {
					block_mc=new Sprite;
					block_mc.graphics.lineStyle();
					block_mc.graphics.beginFill(color_a[i]);
					block_mc.graphics.drawCircle(0,0,50);
					block_mc.graphics.endFill();
					block_mc.x=pos[i][0];
					block_mc.y=pos[i][1];
					block_mc.buttonMode=true;
					block_mc.addEventListener(MouseEvent.CLICK,change_depth);
					block_mc.addEventListener(MouseEvent.MOUSE_DOWN,drag_item);
					block_mc.addEventListener(MouseEvent.MOUSE_UP,nodrag_item);
					block_box.addChild(block_mc);
				}
			}
			private function change_depth(e:MouseEvent){
				var obj=e.target;
				block_box.setChildIndex(obj,block_box.numChildren-1);
			}
			private function drag_item(e:MouseEvent){
				e.target.startDrag();
			}
			private function nodrag_item(e:MouseEvent){
				stopDrag();
			}
		]]>
	</mx:Script>
	<myCanvas3D:Canvas3D id="mycanvas" width="400" height="400" backgroundColor="0xCCCCCC">
		
	</myCanvas3D:Canvas3D>
</mx:Application>


这个其实很简单,要调整到最上层的话,只要用setChildIndex把鼠标点击对象的深度值设为(容器.numChildren-1)就可以啦。setChildIndex常用有以下几种:
置顶:
容器.setChildIndex(对象A,容器.numChildren-1);
置底:
容器.setChildIndex(对象A,0);
插入对象B的前面:
容器.setChildIndex(对象A,容器.getChildIndex(对象B));
插入对象B的后面:
容器.setChildIndex(对象A,容器.getChildIndex(对象B)-1);

我们把上例中的圆换成立方块,结果如下:
分享到:
评论
1 楼 3580737 2012-05-14  
在哪里看看

相关推荐

    [转]45度游戏的另类深度排序遮挡部分半透明(copyPixels)

    NULL 博文链接:https://as3.iteye.com/blog/905500

    迅速确定php多维数组的深度的方法

    例如有一个多维数组: 复制代码 代码如下: array( array( array(1,3,4), array( array( 1,2,3 ) ) ), array( array(1,2), array(1) ) ) 这个数组的深度就是5,那么如何快速的确定一个数组深度。 (PS:T不错的PHP Q...

    OpenGL 混合

    简单的透明 ...在深度缓存启用时,您应该将透明图形按照深度进行排序,并在全部场景绘制完毕之后再绘制这些透明物体。否则您将得到不正确的结果。我知道某些时候这样做是很令人痛苦的,但这是正确的方法。

    Radmin自动登录器v3.0

    新版的功能已经比较完善,基本上可以代替Radmin Viewer 3.5进行管理(除Intel AMT功能外),另外还增加了一些实用功能,支持Windows Xp、Vista、Win7、Win8、2003、2000、9x及相应Windows Server版等操作系统。...

    [Flash.ActionScript.3.0动画教程

    17.2.2 深度排序 17.3 3D灯光 17.4 小结 第五部分 其他技术 第18章 矩阵数学 18.1 矩阵基础 18.2 矩阵运算 18.2.1 矩阵加法 18.2.2 矩阵乘法 18.3 Matrix类 18.4 小结 第19章 实用技巧汇集 19.1 布朗(随机)运动 ...

    十二、区块链学习-Hyperledger Fabric (基于release-1.0) 系统架构

    系统逻辑架构2.1 从应用程序角度应该关注的要素2.1.1 身份管理2.1.2 账本管理2.1.3 交易管理2.1.4 智能合约2.2 从底层角度应该关注的要素2.2.1 成员管理2.2.2 共识服务2.2.3 链码服务2.2.4 安全和密码服务3 网络...

    【哈佛大学】使用AlphaFold估算蛋白质模型精度的最新技术

    最近,AlphaFold等方法通过将深度学习技术与相关蛋白质序列多序列比对的共同进化数据相结合,在这项任务上取得了显著的性能。共同进化信息的使用对这些模型的准确性至关重要,没有这些信息,它们的预测性能会大幅...

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    C4.1.3 is-a和as-a关系 333 C4.2 包含:has-a关系 334 C4.3 回顾抽象基类 335 第12章 有序表及其实现 339 12.1 指定ADT有序表 340 12.1.1 ADT有序表的模板接口 342 12.1.2 使用有序表的操作 343 12.2 基于...

    动手学深度学习Pytorch版本学习笔记 Task 04

    注:去重后排序作用:高频词的id在前,这样可以减少查询次数(相对于随机编码),训练word2vec中有个HUffman树,也是这个思想 (2). 还可以得到给定索引找到其对应的单词的列表,以及给定单词得到对应索引的字典。 (3...

    SinaFlash源码

    as 代码片段如下 class include.DepthSet { public static var group : Object = new Object () // //构造函数 function DepthSet () { } // //设置该MC置顶显示 public static function setTop (groupName...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    还介绍了排序算法及数据结构的实现,包括链表、堆栈、队列和树。此外,本书开始用两章篇幅详细介绍了中英文面试的注意事项、常见问题及程序员的职业规划等软件工程师的常识。最后四章详细讲解了现在流行的智力测试题...

    研究:使用PaddlePaddle进行新颖的深度学习研究

    研究 发布基于飞轮的前沿研究工作,包括CV,NLP,KG,STDM等...基于检索的地标检索与识别系统,支持地标型与非地标型识别,识别与检索结果相结合的多重识别结果投票和重新排序。 图像分类 模型利用重定义网络(URNet)

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其三、职业方向多:Oracle数据库管理方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与讨论、多帮组同学 五、 体系结构 ...

    Radmin自动登录器v3.0-多国语言绿色版-Release1-20150615

    新版的功能已经比较完善,基本上可以代替Radmin Viewer 3.5进行管理(除Intel AMT功能外),另外还增加了一些实用功能,支持Windows Xp、Vista、Win7、Win8、2003、2000、9x及相应Windows Server版等操作系统。...

    visio教程PDF

    12.1.1 File下拉菜单相Save As窗口 12.1.2 Properties对话框 12.1.3 后继保存 12.1.4 打印到文件 12.2 小结 第13章 打开绘图文件 13.1 打开已存在的Visio绘图文件 13.1.1 在启动时打开一个已...

    c/c++ 学习总结 初学者必备

    (3)插入排序; (4)快速排序; (5)堆排序; (6)归并排序; 23、编写gbk_strlen函数,计算含有汉字的字符串的长度,汉字作为一个字符处理;已知:汉字编码为双字节,其中 参数里涉及指针,就要考虑该指针是不是一个需要...

    Visio 2000 技术大全

    12.1.1 File下拉菜单相Save As窗口 12.1.2 Properties对话框 12.1.3 后继保存 12.1.4 打印到文件 12.2 小结 第13章 打开绘图文件 13.1 打开已存在的Visio绘图文件 13.1.1 在启动时打开一...

Global site tag (gtag.js) - Google Analytics