AS3 setChildIndex 的用法

本文介绍如何使用 setChildIndex 方法调整 Flash 中显示对象的层级位置,包括通过点击事件将指定对象移动到最上层的示例代码。

 

setChildIndex 方法允许你向上或向下移动显示对象在显示列表内的位置。你可以把显示列表
考虑成一个数组,它的索引位置是从第 0 层开始的。如果你创建了 3 个显示对象,那么他们
的位置就是第 0,1,2 层。第二层的对象在外面,第 0 层的在最里面。
如果你想把某一个影片剪辑移动到所有显示对象的最里层,可以用
setChildIndex(myMovieClip,0)
执行这条语句之后,其余的对象将会自动往上提升一层,及他们的索引位置都加上了 1,原
来第 0 层的元素移到了第1 层,第1 层的元素移到了第 2 层……
如果想把某一显示对象移到所有对象的上面,这时就要用到 numChildren 属性,它的含义就
是该容器内显示对象的数目。比如现在某一容器内有三个显示对象,这个 numChildren 的值

就是 3,层次列表分别是第 0,1,2 层。那么,最外层的层深就是第 numChildren-1 层。
setChildrenIndex(myMovieClip,numChildren-1)

下例创建一个名为 container 的显示对象容器,然后向该容器添加三个稍微重叠的子显示对象。当用户单击这些对象中的任何一个对象时,clicked() 方法调用 setChildIndex() 方法,将单击的对象移动到 container 对象的子级列表中最上面的位置:

import flash.display.Sprite;
import flash.events.MouseEvent;

var container:Sprite = new Sprite();
addChild(container);

var circle1:Sprite = new Sprite();
circle1.graphics.beginFill(0xFF0000);
circle1.graphics.drawCircle(40, 40, 40);
circle1.addEventListener(MouseEvent.CLICK, clicked);
 
var circle2:Sprite = new Sprite();
circle2.graphics.beginFill(0x00FF00);
circle2.graphics.drawCircle(100, 40, 40);
circle2.addEventListener(MouseEvent.CLICK, clicked);
 
var circle3:Sprite = new Sprite();
circle3.graphics.beginFill(0x0000FF);
circle3.graphics.drawCircle(70, 80, 40);
circle3.addEventListener(MouseEvent.CLICK, clicked);
 
container.addChild(circle1);
container.addChild(circle2);
container.addChild(circle3);
addChild(container);
 
function clicked(event:MouseEvent):void {
    var circle:Sprite = Sprite(event.target);
    var topPosition:uint = container.numChildren - 1;
    container.setChildIndex(circle, topPosition);
}


 

 

 

第一期使用命令介绍: 类: (CefApp): 与进程,命令行参数,代理,资源管理相关的回调类 (CefBrowserProcessHandler): 用于接收进程相关的回调通知。 (CefClient): 回调管理类,主要是用于向浏览器反回我们需要接管哪些功能的类。 (CefLifeSpanHandler):浏览器的运行管理类,包含当浏览器创建完成之后,浏览器被关闭等通知 (CefMainArgs): 数据类,用于设置当前应用实例句柄的。 (CefSettings): 数据类,用于设置一些浏览器整体的基本信息 (CefWindowInfo): 数据类,用于设置一些浏览器的窗口信息 (CefBrowserSettings): 数据类,用于设置一些浏览器的基本信息 用到的类命令: 返回值 (CefBrowserProcessHandler) = (CefApp).GetBrowserProcessHandler()  '获取一个用于管理浏览器进程的类 返回值 空= (CefBrowserProcessHandler).OnContextInitialized()  '回调通知函数,告诉我们浏览器已经准备就绪了。 返回值 (CefLifeSpanHandler) = (CefClient).GetLifeSpanHandler()  '向浏览器返回我们用于接管浏览器进程的类 返回值 空 = (CefLifeSpanHandler).OnAfterCreated()  '回调通知函数,用于告诉我们,当前有一个新的浏览器创建好了 返回值 空 = (CefLifeSpanHandler).DoClose()  '回调通知函数,貌似是表示所有浏览器都关闭之后,Cef上有一大段注释,但是TM始终看不明白... 返回值 空 = (CefLifeSpanHandler).OnBeforeClose()  '回调通知函数,用于告诉我们,当前有一个浏览器被关闭了 返回值 空 = CefMainArgs.Load()  '数据类函数,用于设置当前当前应用的实例句柄 返回值 空 = CefSettings.SetAsSingleProcess()  '数据类函数,是否使用单进程运行浏览器, 1.单进程运行 0.多进程运行。默认是以多进程运行的。 返回值 空 = CefSettings.SetAsNoSandbox()  '数据类函数,是否关闭沙盘功能 返回值 空 = CefSettings.SetAsRemoteDebuggingPort()  '数据类函数,设置远程调试端口 返回值 空 = CefWindowInfo.SetAsChild()  '数据类函数,设置浏览器窗口为子窗口 通用类命令: (All).AddRef()  '给这个函数所属的类增加一次引用计数 (All).Release()  '给这个函数所属的类释放一次引用计数 (All).HasOneRef()  '判断当前这个类是不是第一次被引用 (All).Wrap()  '实际上《Hello WebKit》框架的类都是以一种接近于C++类的存在,为了能给浏览器使用,我们必须要将这个类转换为近似于C的类。这个函数就有这样的作用 (All).Unwrap()  '从C类中取回我们的C++类 (All).ToCpp__() '导入或取出由浏览器提供的类指针或者数据指针 通用命令: CefBrowserHostCreateBrowserSync()  '创建一个新的浏览器,成功返回浏览器类CefBrowser. CefExecuteProcess()  '初始化浏览器进程 CefInitialize()  '全初始化,该函数执行完成之后,(CefBrowserProcessHandler).OnContextInitialized() 将收到通知 CefRunMessageLoop()  '浏览器进程消息循环 CefShutdown()  '浏览器进程结束 CefQuitMessageLoop()  '向所有(多进程下)浏览器进程发送结束通知 REQUIRE_UI_THREAD()  '调试函数,用于检查执行到该函数位置的线程/进程是否为UI线程/进程,如果不是将被中断下来 CEF_BROWSER_RELEASE()  '释放一次浏览器的引用计数 第二期使用命令介绍: (CefDisplayHandler): 与浏览器状态显示相关的类 (CefBrowser): 浏览器类,用于控制或者取得浏览器的相关信息,最常用的类 (CefBrowserHost): 浏览器窗口类,用于控制或者取得浏览器窗口的相关信息,最常用的类 (CefFrame): 浏览器框架类,用于控制或者取得浏览器框架的相关信息,最
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值