`

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  
在哪里看看

相关推荐

    as3.0交换深度的问题.txt

    根据提供的文件信息,我们可以推断出此文档主要讨论的是AS3.0(ActionScript 3.0)中关于“交换深度”(Z-index 或显示顺序)的问题。在Flash和AS3.0中,对象的显示顺序是通过Z-index来控制的,即控制对象在舞台上的...

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

    通过阅读和分析这篇博文,开发者可以学习如何在AS3环境下实现45度游戏的深度排序算法,掌握如何利用copyPixels函数进行像素级别的遮挡处理,以及如何结合Alpha通道和Blending Mode处理半透明效果。这对于提升2D游戏...

    as3算法大全

    AS3中常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序等。其中,快速排序和归并排序在大数据量时表现优秀,但快速排序更易于实现。 三、搜索算法 搜索算法包括线性搜索、二分搜索、...

    flash as3 3d立体墙

    5. **渲染引擎**: 库中的渲染引擎负责将3D对象转换为2D屏幕上的像素,这涉及到投影(正交投影或透视投影)和深度排序,以确保正确显示重叠的3D元素。 6. **事件处理**:在3D立体墙上,用户通常可以通过鼠标或触摸...

    flash/as3 3D 版 SNS社交游戏源码

    总结来说,这个"flash/as3 3D SNS社交游戏源码"是一个综合了3D图形、寻路算法、深度排序、光照效果以及社交功能的实例。对于想深入学习AS3游戏开发,尤其是3D社交游戏的开发者而言,这是一个宝贵的资源,可以从中...

    "As for Multiplayer Games and Virtual Worlds"中排序算法中文翻译

    《关于多人游戏和虚拟世界》一书中,排序算法部分主要探讨了在2.5D视角下的对象排序问题,这是在构建多人游戏或虚拟环境时一个关键的技术挑战。尤其是在等角视角下,正确地安排物体的前后关系对于提供逼真的视觉体验...

    张志晨之flash AS3实用代码:调整mc层深

    ### 张志晨之Flash AS3实用代码:调整MC层深 #### 一、背景介绍与目的 在Adobe Flash Professional中使用ActionScript 3.0(AS3)进行动画制作时,经常需要对多个MovieClip(简称MC)对象进行层次调整以实现自然...

    Action script 3.0 开发消除游戏

    在当今的数字娱乐领域,游戏开发是一项炙手可热的技术,尤其对于初学者来说,选择Action Script 3.0(简称AS3)作为入门语言是一个不错的选择。AS3是Adobe Flash Professional和Flash Builder中的编程语言,以其强大...

    Adobe Flex Builder 3对对碰AS源码

    5. **数据结构与算法**:为了实现对对碰的游戏逻辑,开发者可能需要用到数组、栈、队列等数据结构,以及查找、排序、深度优先搜索(DFS)或广度优先搜索(BFS)等算法来检测和消除匹配的棋子。 6. **状态管理**:...

    AS游戏设计常用数据结构

    AS中通常需要自定义节点和边类,配合图算法(如深度优先搜索DFS、广度优先搜索BFS)来处理。 集合(Set)数据结构用于存储唯一元素,不重复且无序。AS的Vector.类可作为简单的集合,但不支持动态添加新类型。若需更...

    Python-多人跟踪基于centerNet的人体检测器带有pytorch的深度排序算法

    在多人跟踪方面,深度排序(Deep Sort)算法是关键。Deep Sort是对原版的SORT(Simple Online and Realtime Tracking)算法的改进,它引入了深度学习模型来计算物体的相似度,以解决SORT在处理目标重识别时的局限性...

    PHP-基于php实现的快速排序算法-QuickSort.zip

    3. **递归排序(Recursion)**:然后,我们对左右两个子数组分别进行快速排序,直到子数组的大小为1或者0,排序结束。 以下是一个简单的PHP快速排序函数实现: ```php function quickSort($arr) { if(count($arr)...

    3D Interactive Gallery XML Flash(3D图片展示)

    3D Interactive Gallery使用XML文件来存储图像信息,如图片路径、描述、排序顺序等,这使得内容的管理和更新变得极其灵活。XML的结构化特性也便于非程序员进行内容维护,只需要编辑XML文件,就能改变画廊的布局和...

    mysql学习资料 45讲 深度学习

    这个“mysql学习资料 45讲 深度学习”压缩包包含了多个PDF文件,涵盖了MySQL的关键知识点,包括性能优化、高可用性、主备一致性和安全性等方面。下面我们将深入探讨其中几个关键的主题。 1. **"order by"是怎么工作...

    一个flashas3.0的拼图游戏代码

    在拼图游戏中,我们需要实现拼图块的正确排序算法,这可能涉及到深度优先搜索、广度优先搜索等算法。同时,我们需要检测游戏状态,如是否完成、是否有非法移动等,这需要编写相应的判断逻辑。 在“Puzzleas3”...

    神经网络与深度学习python源码主成分分析

    ### 神经网络与深度学习中的主成分分析(PCA)及Python实现 #### 一、神经网络与深度学习概述 神经网络与深度学习作为机器学习的重要分支,在图像识别、语音处理、自然语言处理等领域展现出强大的能力。神经网络...

    Starling框架帮助手册中文版(PDF下载).rar

    同时,它支持视口裁剪、混合模式和深度排序,提供了高效的图形渲染能力。 5. **性能优化**:手册会深入讲解如何通过合理使用纹理 atlases、预加载资源、避免不必要的渲染更新以及利用硬件加速的着色器来优化游戏...

    flash3d相册

    3. **外部排序类**:提到的“外部排序类”可能是用于管理相册图片顺序或实现某种特定排序算法的组件。在Flash中,可以使用`ExternalInterface`类与JavaScript进行通信,从而调用外部的JavaScript函数,或读取外部...

    FLASHMX____AS语言注解

    - **方法**:`getDepth()`返回按钮实例的深度,这在处理舞台上的对象层次时很有用。 - **属性**: - `enabled`:布尔值,用于控制按钮是否可交互,默认为true。 - `tabEnabled`:决定按钮是否参与Tab键的自动...

    Papervision3D 教程

    9. **Z排序**:解释了如何管理3D空间中的深度,确保正确显示重叠的对象。 10. **粒子系统**:展示了如何创建和管理3D粒子效果。 11. **滤镜和效果**:讨论了如何应用滤镜和视觉效果来增强3D场景。 12. **3D矢量...

Global site tag (gtag.js) - Google Analytics