ActionScript里面的操作顺序(转)

[新闻资讯] ActionScript里面的操作顺序

  • 资讯类型: 翻译
  • 来源页面: http://www.senocular.com/flash/tutorials/orderofoperations/
  • 资讯原标题: Order of Operations in ActionScript
  • 资讯原作者: selocular.com
  • 我的评论:
    对这篇文你有 啥看法,跟贴说说吧!欢迎口水和板砖,哈哈。欢迎大家和我们一同分享更多资讯。

    Introduction介绍

    要想快速有效的使用某个系统,了解每个动作的操作顺序是非常重要的。在Flash Player里面运行的SWF里面运行的ActionScript遵循一个特别的顺序,这个对正确有效的完成你的任务非常的重要。
    要想快速有效的使用某个系统,了解每个动作的操作顺序是非常重要的。在Flash Player里面运行的SWF里面运行的ActionScript遵循一个特别的顺序,这个对正确有效的完成你的任务非常的重要。
    此指南将ActionScript的操作顺序分成了三个部分: object life cycle(对象 生命周期), frame execution(帧执行), 和 event s(事件 ). 所有这些的中心是帧的执行,特别是当在Flash中考虑时间轴的使用的时候。这个的本质其实是在SWF中重复运行,创建对象,分发事件和渲染屏幕。虽然此 处重点关注的对象是时间轴,由于Adobe Flash Professional 授 权工具 (Flash Pro),但是它们的大部分的内容可以被应用 到一个更加以ActionScript为中心目标的 项目上。

    Object Life Cycle对象生命周期
    一个对象的生命周期代表它在代码 中何时存在,何时可用于连接,或者何时在屏幕的渲染 下可见。对象用ActionScript创建的过程是非常直观的,此时大部分的焦点还是集中在时间轴上的处于对象生命周期之内的显示对象。

    Object Creation 对象创建
    SWF文件的初始化大部分是从文件类的构造器开始的。这个类是和主SWF实例或者时间轴关联的类。虽然这个是对SWF认知的开始点,在SWF里面运行的第 一段代码实际上是可能是由主时间轴的第一帧里面的子对象开始的(和在Flash Pro中创建的一样, 或者是在SWF标签中定义)。
    时间轴上面的对象都是由下至上构建的,都是由子对象开始向上工作直至到达文件类实例。这些子对象的父对象必须保持存在直至此点,所以Flash使用2-传 递 初始化流程, 一个是不用构造器初始化的对象,另一个是在每次对象创建的时候运行构造器。初始化阶段用物理对象实例创建显示列表层次图。同时它会利用此时机将将所有的类 变量复制到这些实例当中,但是它会将构造器独立出来(类变量的意思是在类体里面类成员声明定义的值)。这些构造器在第二此值传递之前是不会运行的,直至这 些初始化设置完成。所有对象的构造器都已经执行,由子对象从层图底部开始向文件类实例开始时。基于时间轴帧构建的基本操作顺序是:

    Order of operations: Object Creation操作顺序:对象的创建
    1.        初始化所有的显示对象
    i.        创建好显示列表的层次结构
    ii.        分发类属性

    2.        构建显示对象,子对象优先,由下向上
    i.        设定父实例变量; DisplayObject.name defined
    ii.        显示对象列表属性设定(parent, stage, root, loaderInfo)
    iii.        调用 构造器
    iv.        Event: DisplayObject.added
    v.        Event: DisplayObject.addedToStage
    这个创建了一个条件,这个条件允许所有的构造器内的对象连接到任何其他的显示列表层中的对象,即使这些对象的构造器没有运行。 它可以被保证对象自己显示列表里面的实例在它的子对象构建完成的时候也完成了构造器的运行。
    备注:即使在初始化阶段没有触发对象的added/addedToStage 事件,对象在构造器运行之后会立即添加到显示列表当中。
    以下示范的是一个给定collection的SWF的字对象和孙子对象,列表中处于较矮位置的深度较低。(例如 child2在child1之下等等):
    1. •        stage
    2. o        root (8)
    3.         child1 (7)
    4.         grandchild1 (6)
    5.         grandchild2 (5)
    6.         child2 (4)
    7.         grandchild1 (3)
    8.         gtandchild2 (2)
    9.         child3 (1)
    复制代码
    如果你是用代码管理你所有实例的实例化,你必须全盘控 制实例化顺序。在此情况下,文件类的构造器(实际上是整个应用的起始点),由于其他构造器在它里面,所以它会在其他构造器之前运行。added 和 addedToStage 事件将会在调用addChild()/addChildAt()直接配对。

    Object Destruction对象的摧毁
    当对象a)无法再通过ActionScript引用到b)在Flash Player中被garbage collector(GC)资源回收器处理掉的时候,对象通常是不会存在,或者已经被从内存里面移除。GC是一个隐藏的,后台程序 ,他自动为你管理内存,删除不再使用的对象。引用自 时间轴的对象自动由时间轴管理,创建和删除也是进入和退出时间轴管理。
    当一个时间轴对象在下一帧不复存在的时候,它将会在当前帧的最后被摧毁掉。ActionScript没有摧毁器,所以显示对象的摧毁通常是由从时间轴移除 来辨识,此步骤亦可通过事件监听到。这个流程经常等同于从内存移除,在此流程后有任何自定义的ActionScript引用持续存在。
    从主时间轴移除只发生在最顶层父对象的显示列表。换言之,一个对象从主时间轴的移除并不要求此对象的自己的显示列表被移除。
    对象从主时间轴的移除操作顺序如下:

    Order of operations: Object Destruction操作顺序:对象的摧毁
    注意,最少在事件的周期内,由于构造的原因,对象的移除由父对象开始多于由子对象开始。在上面两种情况下,操作顺序还是由下往上,从最底层最低深度的实例 开始。虽然只是最顶层的父亲对象被从显示列表中移除,但是所有显示列表里面相关都会触发一个removedFromStage事件,这个是从父对象开始, 然后父亲对象将散播此事件到它的子对象。子对象不会收到他们自己的移除事件。
    更重要的是要知道从显示列表进行物理移除是在这些事件发生之前就已经进行。虽然一个显示对象的显示列表属性(父对象,舞台等等)还是有效的可连接的,一些 操作诸如parent.getChildAt(this)可能会在移除事件后操作失败,这是由于此时这些对象在父对象已经不复物理存在(由于这些对象有移 除事件)。他的一些属性的存在例如父对象完全是出于便利之需,而不是出现在显示列表中。

    Null Timeline References空时间轴引用

    Flash Pro和Flash Player一起工作的原因是用来确保时间轴对象可以通过代码很容易的引用到。当在Flash Pro中给屏幕对象实例名的时候,这将会引发两件事情,1)在类定义的时间轴对象中(这个选项可以在公共设置中关闭)中将会创建一个此名的成员变量2)时 间轴实例的名称属性被分配为实例的值的字符串形式。成员变量在构建时分配在摧毁时清空。
    虽然你大可不必做这些,你是否曾经遇到过这样的情况,在时间轴上同时有两个实例共有同一个实例名和其他资源,但是在其他帧上可能没有,曾经应用这些对象的 时间轴成员变量将被清空,即使这个对象(或者他们中的一个)还是在屏幕上存在。这是因为摧毁程序并不关心它本身在帧里面的当前状态,也不关心有同名的对象 存在于此帧中。它只是简单的关注在时间轴是否有此名称的对象被移除。这是一个另类,但是我之前见过。
    以下说明假设主时间轴(root)被清空为一个空帧的移除顺序.这个也和移除的事件相对应:
    1. •        stage
    2. o        root (Never removed)
    3.         child1 (3)
    4.         grandchild1
    5.         grandchild2
    6.         child2 (2)
    7.         grandchild1
    8.         gtandchild2
    9.         child3 (1)
    复制代码
    记住,只有最顶级的显示对象在显示列表中被移除。此对 象的拥有,这个时候变成了没人用的无主孤魂了。以下是和以上相同的例子,但是它遵从removedFromStage事件的执行顺序:
    1. •        stage
    2. o        root (Never removed)
    3.         child1 (5)
    4.         grandchild1 (7)
    5.         grandchild2 (6)
    6.         child2 (2)
    7.         grandchild1 (4)
    8.         gtandchild2 (3)
    9.         child3 (1)
    复制代码
    你可以在这里看到移除顺序是如何从父亲对象开始而不是 子对象开始。
    注:addedToStage和removedFromStage事件没有在Flash Player 9中发行,而是在Flash Player 9.0.28.0(和Adobe Flash CS3 Professianl一起发售的)中发行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值