从ActionScript 2.0迁移到ActionScript 3.0: 主要概念和更改-使用影片剪辑

  本文概述了一些主要概念, 它们可以帮助您将应用程序迁移到 ActionScript 3.0。当我最初开始构建 ActionScript 3.0 应用程序时, 最难习惯的是对我使用多年的简单命令的更改。 attachMovie 方法到哪里去了? MovieClip 类的内容移到哪里去了? 这种感觉就像大赛前我必须重新学习走路一样。
  在过去的两年中, 我全职从事 ActionScript 3.0 SWF 和 Adobe AIR 应用程序制作。我笑过。我也哭过。我还撞过几次墙 (比喻)。总之, 我必须说很难想象再回到 ActionScript 2.0 会怎样。
总体而言, ActionScript 3.0 的优点在于一切都是标准化的: 通过一种方式创建实例, 通过另一种方式使用事件, 以此类推。如果您初次接触 ActionScript 代码编写, 可能需要学习不少内容, 但学习会比较简单并且它确实是个好起点。

在本文中, 您会在以下区域找到 ActionScript 3.0 中与更改相关的提示和意见:

为了充分利用本文, 您应当对 ActionScript 2.0 和 Adobe Flash CS4 Professional 有所了解。

关于作者

Dan Carr 是旧金山 Dan Carr Design* 的所有人、首席开发人员以及培训师。凭借多年的 Macromedia 和 Adobe 开发经验, Dan 已创建可用于 Flash 的许多功能, 其中包括电子教学模板、UI 组件和 Developer Resource Kit 扩展。
Dan 在旧金山教授 Flash 设计和 ActionScript 课程, 并为大众以及 Adobe 产品小组开发电子教学和 Web 应用程序。

原文地址:http://www.adobe.com/cn/devnet/flash/articles/first_as3_application.html

 

使用影片剪辑

影片剪辑现在是显示对象

      在先前版本的 ActionScript 中, MovieClip 对象是宇宙的中心, 因为它包含将时间轴和容器用于可视内容的所有命令。虽然 MovieClip 类很适合控制内容, 它在结构、灵活性以及 API 粒度方面存在一些劣势。

      我在 ActionScript 3.0 中注意到的第一个地方就是 MovieClip API。 在 ActionScript 3.0 中, MovieClip API 不再包含我过去常用的许多命令。ActionScript 3.0 语言的一大改进是 API 粒度变化。MovieClip API 的大部分内容已移到 DisplayObject 和 DisplayObjectContainer 类, MovieClip 类从这两个类那里继承。MovieClip API 现在主要用于反转时间轴。

      您需要了解这些信息, 因为您可能会花时间浏览 ActionScript 3.0 帮助文档并从中找出可用命令。MovieClip 类从以下列表中的类继承:

MovieClip › Sprite*DisplayObjectContainer*InteractiveObject*DisplayObject*EventDispatcher*Object*

      注意, MovieClip 类为 Sprite 类的子类。Sprite 基本为没有时间轴的影片剪辑。它更轻量, 建议将它用语创建无需访问时间轴控制的可视对象。

要了解影片剪辑的所有功能, 请参阅继承链中各个类的文档。

嵌套时间轴现在是显示列表

       在 ActionScript 出名之前, Flash 已包含影片剪辑实例的嵌套级创建功能。当 ActionScript 刚发展起来时, 它以处理创作时中的影片剪辑的相同方式处理代码中的影片剪辑。而 ActionScript 3.0 中则不然。

      ActionScript 3.0 中的时间轴需要通过显示列表的概念进行理解。对于载入影片的每个 SWF, 显示列表有一个 stage 属性和一个 root 属性。使用 ActionScript 将影片剪辑和其他可视对象实例化时, 不会将它们明确指派到时间轴。如果您曾经动态创建过影片剪辑, 它会是一个奇怪的概念, 但它的优势在于能将影片剪辑实例化, 并当您决定在显示列表中显示它之后才显示它。并且, 您可以在期望的任意时间轴中显示新实例, 而不是仅限于实例化所在的那个时间轴。

     对影片剪辑实例进行实例化时, 它们是显示对象。当影片剪辑实例与显示列表关联时, 影片剪辑就像显示对象容器本身那样转为活跃状态。这意味着两点。首先, 将影片剪辑实例化并添加到显示列表后, 它可以显示和管理本身包含的子实例。其次, 在将影片剪辑实例添加到显示列表之前, 它无法显示子代或访问显示列表的 stageroot 属性。

     在 ActionScript 3.0 中, 可以使用 addChild 方法查看显示在舞台上的显示对象。例如, 假设您要为库中的 ComboBox 控制创建一个实例。要查看显示在舞台上的实例, 您需要使用以下代码:

     上述 addChild 调用将 myCombo 实例添加到显示列表中。此时, myCombo 实例出现在舞台上并获得对 stage root parent 属性的访问权。注意, myCombo 实例使用 new 关键字而不是 attachMovie 方法创建。

    实例验证

     当您试图访问未定义的实例时, ActionScript 3.0 会显示错误。当您声明实例的一个变量引用, 而这个实例其实尚未将对象实例化到引用并添加到显示列表中, 通常会发生这种情况。多数情况下, 这是个时间问题。

要验证显示列表中未定义的实例, 请使用 getChildByName 方法, 如以下代码所示:

上述代码使用实例名称来测试实例是否在显示列表中。如果结果是 null , 则不执行操作并且不会出错。也可以使用 try..catch 语句来防止未处理的错误导致播放器停止执行。

影片剪辑属性更改

在 ActionScript 3.0 中, 下划线 (_) 已从属性名称中去掉。 在某些情况下, 为常用属性设计值的主要也已更新。

影片剪辑的 alpha 属性现在的设置比例为 0 到 1 而不是 0 到 100。例如, 50% 不透明应设置为:

myInstance.alpha = 0.5;

显示对象的 scaleX scaleY 属性现在以类似方式设置。 例如, 150% 正常缩放应设置为:

myInstance.scaleX = 1.5;
myInstance.scaleY = 1.5;

在代码中使用 this_root_parent_global

this 别名可用于 ActionScript 3.0 中, 其行为与 ActionScript 的先前版本一样。ActionScript 3.0 中没有 _global 路径。如果需要在 ActionScript 3.0 中使用全局引用, 请尝试创建包含静态属性的类。当 _parent 属性添加到显示列表时, 可以作为任何显示对象的 parent 属性访问它。_root 属性现在与载入影片的每个 SWF 相关, 将显示对象添加到显示列表时, 可通过 root 属性访问它。stage 属性通常可以按 _root 属性的相同用法进行使用。将 stage 属性添加到显示列表时, 它可用于任何显示对象。

处理深度

ActionScript 3.0 不再包含 swapDepths getNextHighestDepth 方法。您将使用与添加到显示列表的影片剪辑容器关联的 DisplayObjectContainer 方法。ActionScript 3.0 中的术语基于子对象列表中的显示对象“索引”, 而不是“深度”概念。

例如, 要将 myInstance 剪辑发送到堆序列的顶部, 请使用以下代码:

setChildIndex(myInstance, numChildren - 1);

使用 drawing API

与 MovieClip API 的其他更改一样, drawing API 已移到显示对象的 graphics 属性。除新位置外, 其使用过程相同-有几处明显的增强。我喜欢的新功能包括 drawRect 和 drawEllipse 快捷命令。

以下代码显示如何动态画出矩形, 然后将此矩形作为遮罩应用到其他实例。 遮罩对象没有时间轴, 因此作为子画面而不是影片剪辑来创建:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值