辅助功能*

Flash TechNote

常见问题 - Flash MX 2004

繁體中文 | 한국어 | Deutsch | España | Français | Italiano

此处列出了用户报告的一些常见问题, 以及有关这些问题的已知限制、 解决方法和建议。此文档中描述的一些问题可能是特定于平台或系统的, 不一定对所有用户都有影响。

使用此文档前, 您应安装 Flash MX 2004 最新版的更新程序。7.2 版更新程序*提高了性能和稳定性, 并增强了功能。 有关更多信息, 请参见发行说明Macromedia Flash MX 2004 Updater 常见问题解答*

有关这些问题或您遇到的此处未列出的其他问题的详细信息, 请与您所在地区的技术支持部门联系。

此文档分为以下几个部分:


常规主题

动作现在区分大小写

当您发布 Macromedia Flash Player 7 或更高版本的文件时, 无论您使用的是动作脚本 1 还是动作脚本 2.0, Flash 都区分大小写。 现在, 关键字、类名、变量、方法名和其他代码构造都区分大小写, 这使得动作脚本更接近于 ECMA 标准。此 更改还会影响使用 LoadVars.load() 方法 加载的外部变量以及包含的外部 AS 文件。

例如, 考虑 var1 = "object1", Var1 = "object2"

在 Flash 的早期版本中, 这两个语句只会影响同一个变量。 但在 Flash Player 7 中, 这将创建两个变量(var1Var1)。 如果一个现有的应用程序产生了错误, 则首先应检查大小写。有关详细信息, 请参见 Flash MX 2004 的帮助文档。

动作面板中不再有标准模式

在 Flash 的早期版本中, 可以采用以下两种模式使用“动作”面板: 标准模式(即通过填写选项和参数来创建代码) 和专家模式(即直接在“动作”面板中添加命令)。 在 Flash MX 2004 和 Flash MX Professional 2004 中, 标准模式不再可用。 现在, 您可以使用新的“行为”功能添加执行常见脚本功能的动作组, 也可以使用经过改进的上下文相关的帮助资源, 这些资源提供了使用 每个动作脚本 命令的详细指导。另外, 现在仍然支持将命令从“动作”工具箱拖入“动作”面板, 或者使用 “添加”(+) 按钮将命令添加到脚本。

例如, 使用相应的行为在特定帧或标签播放影片剪辑 比使用标准模式中的对应项要简单得多。在这种情况下, 用户可在出现的对话框中选择代码选项, 对于大多数新用户而言, 这比标准模式 更加易于使用。我们承认, 现在还有些动作没有被“行为”替换, 但随着我们对此解决方案的不断完善, 最终所有动作都将被“行为”所替换。

滚动条组件

Flash MX 2004 没有附带第 2 版的滚动条组件。在 Flash MX 2004 中, 建议使用 TextArea 组件创建滚动 文本。TextArea 自动包含一个滚动条, 该滚动条具有自动 显示/隐藏功能以及其他一些选项。

新的第 2 版滚动条组件是 Flash 的最新更新中的 一项功能。滚动条组件在 Macromedia Flash MX 2004 的 7.2 版更新中提供。

注: 第 2 版滚动条要求“视图”>“对齐”>“对齐对象” 为关闭状态。

启用“对齐对象”:

  1. 在 Flash MX 2004 中打开一个新文件。
  2. 选择“视图”>“对齐”>“对齐对象”来启用“对齐对象”。 您会看到一个指示这一设置的复选标记。
  3. 保存该文件。

有关更多信息, 请参见您的文档。

对“撤消”的更改

在 Flash 的早期版本中, 撤消操作是特定于对象的, 不同的界面区域(如舞台、影片剪辑和库)分别有 不同的一组撤消 步骤。在 Flash MX 2004 中, 撤消堆栈是特定于文档的。这 可能会改变设计人员用于以前的行为的工作流程。

Macromedia Flash MX 2004 包含一个新的“历史记录”面板。特定于文档的 撤消堆栈允许在“历史记录”面板中顺序记录所有用户动作的 完整列表。开发人员可以使用这一新的“历史记录”面板执行“撤消”操作, 而且, 该面板还支持一些强大的新功能, 如自定义命令。

有关更多信息, 请参见您的文档。


面向对象的编程(类和对象)

使用类初始化舞台上组件的属性

对于那些试图使用外部类的方法来设置舞台上组件属性的初始值的开发人员来说, 只有当从主要时间轴中调用方法时才能设置这些值。开发人员不能通过在类构造函数中调用方法来设置这些值。原因是内存中对类构造函数的调用发生在组件被加载到舞台上之前。由于组件属性只能在组件位于舞台上以后才能进行设置, 因此对类构造函数的调用进行得太早了。

有三种方法可解决这一时间性问题:

使用 onLoad 方法: 此方法在加载组件后设置属性。最直接的解决方案是在 onLoad 方法中设置组件属性, 或者在类的 onLoad 方法中调用设置组件属性的方法。例如, 您的类中可能需要如下方法:

function onLoad(){ // 设置组件属性的语句
 mycomponent_cb.addEventListener("change", CategoriesChange);
 mycomponent_cb.maxHPosition = 600;
 mycomponent_cb.hScrollPolicy = "on";
 initialize(); // 调用类中的方法来设置组件属性
}

动态生成组件并设置其属性: 通过在类中使用 createClassObject 方法, 可以在类中创建在运行时动态添加的组件。通过这种方式, 类可以控制将组件添加到舞台的时间, 并从而控制设置属性的时间。有关 createClassObject 的更多信息, 请参见您的联机帮助。

使用组件的 doLater 方法: 这会在组件准备好接收属性指定时启动一个方法。有关 doLater 方法的更多信息, 请参见本文档中的组件属性无法用于动作脚本

Flash 编译器缓存外部类文件

Flash 在测试或发布时将不会反映保存的对外部类文件的更改。原因是 Flash 会缓存其编译的类的副本。缓存的已编译类的副本实际上提高了 Flash 编译器的速度;但是, 当在多台计算机上开发时或者将源文件存储在另一台计算机上时, 通知编译器刷新缓存的时间戳可能会发生冲突。

这个问题可通过删除 ASO 文件夹来解决。删除该文件夹将会强制 Flash 重新创建该文件夹并重新编译与此 FLA 关联的所有类。ASO 文件夹位于 Application Data 文件夹中:

\Macromedia\Flash MX 2004\en\Configuration\Classes\aso

注: 我们不建议您创作存储在网络驱动器中的文件, 除非您正在使用项目的版本控制功能。这样做可能会导致下列情况发生:

  • 在出现网络连接问题时损坏源文件。发生保存错误时, Flash 可能无法将文件保存到本地驱动器。
  • 系统时钟在编译时设置 ASO 文件的时间戳。在创作时保存到另一个系统的类文件的时间戳由该远程系统的时钟设置。这通常会导致时间戳冲突。

组件属性无法用于动作脚本

在属性检查器中设置的组件属性不能立即在时间轴中用于动作脚本。例如, 在影片第一帧上使用动作脚本尝试跟踪 CheckBox 组件的 label 属性的操作将会以静默方式失败, 即使该组件如预期的那样显示在舞台上也一样。

尽管在时间轴中使用动作脚本在类或脚本中设置的属性可立即使用, 但大多数在属性检查器中指定的属性直到组件的下一帧才会设置。

虽然任何能够延迟访问属性的时间的方法都可以解决此问题, 但最简单直接的解决方案是使用 UIObject 的 doLater() 方法。doLater() 方法只有在组件已在属性检查器中设置完所有自身属性后才会调用用户定义的函数。所有 V2 组件都是从 UIObject 继承的, 因此都有 doLater() 方法。下面的示例显示了 doLater() 方法的用法:

// 从组件实例中调用 doLater 方法


  componentInstance.doLater ( target , " someMethod ");

// 从 doLater 方法中调用的函数或方法

function someMethod() { 
  trace(componentInstance.label); // 现在可以跟踪属性

   //任何其他语句
} 

* 其中 target 是目标影片剪辑, someMethod 是 String 类型的函数名。

无法将子文件夹中的类指定给影片剪辑

一旦将动作脚本类移动到另一文件夹, 用户就无法将这些类指定给舞台上的影片剪辑。移动一个类文件时, Macromedia Flash 会创建一个包, 现在该类文件就存储在这个包中。包中的所有类都必须在其类定义中指定它们的包的名称。要使用该类, 必须在实例化时首先指定其全限定类名, 或者通过使用 import 语句导入其包。这也适用于指定给影片剪辑、表单和幻灯片的类。

将一个类指定给库中的影片剪辑时, 如果该类属于某个包, 则必须确保在“链接属性”对话框的“AS 2.0 类”文本框中指定其全限定类名。

下面的示例显示了如何使用以下参数指定完整的类名。

  • 文件夹: 该类位于子文件夹 fun
  • 类文件名称: 该类文件的名称为 MoveRight.as
  • 要应用该类的元件: 我们会将该类指定给影片剪辑元件 Ball

根据您的需要插入参数:

  1. 打开“库”面板(“窗口”>“库”), 然后选择 Ball 元件
  2. 在“库”面板的选项菜单中选择“链接”以打开“链接属性”对话框
  3. 在“链接属性”对话框中, 选中“为动作脚本导出”选项, 然后在“AS 2.0 类”文本框中键入 fun.MoveRight

    : 不带 .AS 扩展名的类名称将采用其父文件夹或目录的名称。
  4. 单击“确定”

自定义类对象的使用限制

在动作脚本 2.0 中创建和使用自定义类对象与在其他面向对象的编程语言中相似。但是, 开发人员需要注意当前动作脚本实现还具有一些限制。

  • 从自定义类创建的对象公开了私有变量和方法(无成员访问控制)。
  • 隐式 Get 和 Set 方法无法充当对象的真正属性。
  • 自定义类对象不能作为 init 对象与 attachMovie 一起使用。这导致私有变量的公开以及所有类方法(包括隐式 Get 和 Set 方法)的丢失。

为提供向后兼容性, Flash Player 7 不区分私有成员和公共成员。成员访问控制仅在编译时执行, 在运行时不执行。常规对象可从核心类或自定义类创建, 但成员访问控制和隐式方法可用性仅在显式指定了新对象的类型时才可访问。

在动作脚本 2.0 的当前实现中, 传递到复杂数据结构(如数组和大多数组件)中的对象都自动转换为 Object 对象。一旦一个自定义类对象传递到数组中, 显式类型指定就会丢失。(数组方法仅包含 Object 对象, 因此所有通过隐式 Get 方法公开的属性都不能通过该数组或其中的任何元素访问。)

在动作脚本 2.0 中, 将一个自定义对象作为 init 对象传递给 attachMovie 方法时, 该自定义类对象会转换为 Object 对象。该类的所有私有成员均被公开。只有该对象的直接属性(而非通过原型链继承的属性)会复制到新的影片剪辑, 因此该对象的原始类方法会丢失。

: 要确定一个属性是继承属性还是直接属性, 可以使用 Object.hasOwnProperty()

解决方案: 在从自定义类创建新对象时使用显式类型指定。请注意, 将对象作为参数传递时, 显式类型指定可能会丢失。不要将在动作脚本 2.0 中创建的自定义类对象作为 init 对象传递给 attachMovie 方法。如果需要将自定义类对象作为参数传递, 请以在动作脚本 1.0 中创建类的方法创建类。

使用变量声明和 createClassObject 后 with 语句失败

声明了一个数据类型为组件的变量并使用 createClassObject 实例化了该变量的一个实例后, with 动作失败并返回错误“由于指定的对象不存在, ‘with’动作失败。”。

例如, 编译下面的代码时就会返回此错误:

var grid_dg:mx.controls.DataGrid
createClassObject(DataGrid, "grid_dg", 90);
with (grid_dg) {
setSize(260, 120);
move(300, 230);
}

解决方案: 防止产生此错误的一种方法是将该组件的实例手动放置到舞台上, 而不是使用 createClassObject


数据集成和绑定

在绑定事件之后调用数据绑定格式程序时该格式程序无法工作

在执行绑定外的任何时候执行该格式程序时, 使用该格式程序的数据绑定不能用于数据提供程序。DataProvider 接口与其所有关联 UI 组件均有复杂的不间断的交互。与 UI 组件的这一事件模型交互会被格式程序禁用, 并会停止正常操作所必需的交互。

这个问题之所以存在, 是因为 UI 组件和 DataSet 之间通过 dataProvider 属性进行的绑定仅发生一次, 且该 DataProvider 接口仅要求此绑定发生一次。

对于 DataSet, 此绑定的执行仅发生一次(例如, 当在第一帧创建绑定时)。出于性能和可用性的考虑, 该绑定的再次执行会被阻止。

格式程序位于绑定上意味着仅在执行绑定时(在实际传递数据时)才应用该格式程序。如果在其他时候(如作为动作的结果)调用该格式程序, 则它不会产生任何影响, 因为没有传递任何数据以进行格式设置。

解决方案: 使用 DataGrid 时, 在执行 dataProvider 绑定前为网格创建列可以提供一种最好的方法来控制让哪些列在网格中可见。

要更正丢失了列表控制(如列表框、组合框, 等等)要求的 DataSet 或 Connector 组件中的数据和标签属性的问题, 请使用标签和数据名称在关联连接器上创建一个虚拟字段, 并将它们设置为指向相应的数据。

要在显示列表中提供计算, 请使用已计算字段种类的 DataSet, 并将计算代码放入 DataSet 的 calcFields 事件的监听器。《使用组件》的 DataSet.calcFields 主题的帮助文档对此事件进行了介绍。

跨场景绑定组件

目前还不支持绑定到其他场景中的组件。如果您试图绑定到另一场景中的组件, 绑定会失败, 但不会显示任何错误信息。

将复杂数据结构传递到 Web 服务

试图将复杂数据结构(对象数组、多维数组、包含数组的对象等)传入或传出 Web 服务时, 您会在输出窗口接收到一个错误, 说明 Flash 无法打开该 URL。传入和传出 Flash 的 SOAP 信息可能并非是良构的。如果您的应用程序要求将复杂数据类型传入或传出 Web 服务, 建议您使用 Flash Remoting。(虽然不同供应商的应用程序服务器会显示不同的结果, 其中的一些还获得了成功, 但 Coldfusion 和 Axis 的 Web 服务都有一些已知的问题)。

XUpdater

在通过 XUpdater 传递的字符串中使用小于符号会破坏变量增量包的 XML 结构。

这个问题已在 Macromedia Flash MX 2004 Updater 中得到解决。

有关更多信息, 请下载 7.2 版更新*并联系技术支持部门。

SQL 连接器

Macromedia Flash MX 2004 Professional 不包含本机 SQL Server 连接器(该连接器是 FireFly 组件集的一部分)。SQL Server 连接器专门设计用于与 Microsoft SQL Server 一起使用。

Macromedia Flash 2004 Professional 提供的是 RDBMSResolver, 后者可用于更新任何关系数据库。RDBMSResolver 发送更新时所采用的格式易于开发人员进行分析和为其创建 SQL 语句, 并提供了接收来自服务器的更新和错误的附加能力。

注: Macromedia 对 Firefly 和 Flash 的用户进行了问卷调查, 发现用户倾向于在 RDBMS Resolver 上进行更多投资。我们会继续对用户进行问卷调查, 并以此为指导调整未来的产品方向。

RDBMSResolver 忽略结果数据包中的更新

在某些环境中, RDBMSResolver 无法将返回的结果转换为 DataSet 组件以显示在一个页面中。在此情况下, 屏幕会显示为空白。RDBMSResolver 结果数据包可包含两种类型的节点:

  • 描述操作结果的节点(操作节点)。
  • 更新节点(通常名为插入、更新或删除), 通常描述其他客户端对记录进行的修改。

RDBMSResolver 会忽略结果数据包的更新节点, 除非该结果数据包中包括至少一个操作节点。

成功时: 在典型的用法方案中, 如果最终用户更改了 DataSet 中的数据并触发了数据库的更新, RDBMSResolver 会接收来自 DataSet 组件的增量数据包。RDBMSResolver 转换此增量数据包, 并通过 Connector 组件将此数据发送到中间层(以待处理并输入到数据库中)。然后 RDBMSResolver 等待接收来自中间层的结果数据包以确认更新。结果数据包中包含所需的“操作”节点(此节点可描述操作并返回相关的所有服务器信息)和可选节点(可以描述必须返回到客户端应用程序的其他数据库/服务器进程的节点)。

失败时: RDBMSResolver 被定义为发送更新, 但不接收描述该操作的服务器信息。RDBMSResolver 仍转换增量数据包, 并通过 Connector 组件将此数据发送到中间层。但是, 结果(“操作”节点)中没有操作信息, RDBMSResolver 并不获取来自中间层的结果数据包。即使有可选节点, RDBMSResolver 也不会等待该通信。

解决方案: 目前, 解决此问题的最简单的方法是, 通过确保在发送到 RDBMSResolver 的增量数据包中请求一个操作来避免此问题的产生。不要试图使用单个数据连接器来请求来自中间层的数据(结构类似结果数据包), 因为它不会包含所需的操作节点。相反, 请考虑采用一个更典型的结构, 其中 DataSet 由来自最终用户的更新触发, 且增量数据包(由操作节点完成)会发送到 RDBMSResolver。

注: RDBMSResolver 目前不区分在结果数据包中接收到的数据的类型。所有数据均将转换为字符串。

Flash MX 2004 中的 Remoting

Macromedia 已发布了 Flash MX 2004 的 Flash Remoting 组件*和 Flash Player 7 的动作脚本 2.0 版。这些组件于 2004 年 6 月发布。动作脚本 2.0 的更新包括:

  • Flash Remoting 动作脚本 API 已经更新, 以与动作脚本 2.0 相符。
  • 新的 RemotingConnector 组件允许您直接使用 Flash MX 2004 Professional 中新的数据绑定功能。
  • 文档有显著改进, 包括一个新的格式和示例应用程序。

有关完整的详细信息, 请参见 Macromedia Flash Remoting MX 组件*

如果我在考虑构建新的应用程序, 我应该使用 Remoting 还是 Macromedia Flash MX Professional 2004 中提供的某个 Connector 组件?

您可以根据项目要求以及这些技术的适用性自行选择。在某些情况下, Flash Remoting 非常有用;而在其他情况下, 数据组件更适合一些。我们相信, 未来会出现长期的到 Web 服务和应用程序服务器连接的迁移。重要的是您可以使用此版本中的任一种进行开发, 因此您可以研究这两种解决方案并选择最适合您的一种。


媒体(音频/视频)

更新的 MediaPlayback 组件对“线索点导航”行为无效

MediaPlayback 组件中的问题不允许它查询线索点事件的名称或时间。这会削弱"已标记帧线索点导航"或"幻灯片线索点导航"行为。

要使用这些行为或引用一个线索点事件的名称或时间, 请改为使用 Media Display 和 MediaController 的组合。这些组件中不会出现此问题。在使用 Macromedia Flash MX Professional 2004 媒体组件构建流式视频演示文稿*(文章)中可找到一起使用这两个组件的示例。

FLV 导出程序 (Adobe Premiere)

FLV 导出程序在 Adobe Premiere 6.5 的 Windows 版本上不受支持。Flash MX 2004 扩展功能列表列出了 Adobe Premiere 6.5 所支持的功能, 但此功能仅在 Adobe Premiere 6.5 的 Macintosh 版本上可用。FLV 导出在 Adobe Premiere 6.5 Pro Update 中也不受支持。

无法导出为带音频的 FLV

QuickTime Pro 在播放 MPEG 视频时仅支持其音频部分。如果源文件是 MPEG 格式, 则导出为任何视频格式(包括 FLV)时都会导致音频的丢失。建议您使用第三方视频/音频创作软件来以与 QuickTime 兼容的格式制作视频。有关更多信息, 请参见 Apple 的 Web 站点上的 QuickTime 6 MPEG - 2 Playback FAQ。(www.apple.com)

解决方案: 如果您没有其他视频创作软件, 无法制作与 QuickTime 兼容的格式的视频, 而且您希望将 MPEG 格式的视频导出为 FLV, 您可以在受支持的 Windows 平台上使用 Flash 进行导出。

  1. 将您的 MPEG 文件导入到一个新 Flash 文档的库, 文件菜单为“文件”>“导入”>“导入到库”
  2. 您可以在导入前根据需要调节设置以控制质量, 然后选择“完成”将 MPEG 导入到库
    注: 此时可用的选项的范围与使用 FLV 导出程序时不同。)
  3. MPEG 进入库中后, 请选择该 MPEG 元件并右击以打开属性窗口
  4. 选择“导出”按钮制作 MPEG 的带音频的 FLV 版本。(此 FLV 可通过 Macintosh 系统上的 Flash 播放。)

注: Flash 中的导出功能依赖于 Macintosh 平台上的 QuickTime, 因此此解决方案仅在受支持的 Windows 平台上可用。

在 Mac OS X 上将 FLV 导出程序更新为 1.1 后无法导出到 FLV

在 Mac OS X 上, 在前一版本上直接安装更新的 FLV Exporter(版本 1.1)后, 导出到 FLV 的选项会消失。此外还报告了其他的异常行为, 如导出到"FLC"的选项行为异常。

解决方案: 手动卸载 FLV 导出程序(通过将其移动到“废纸篓”), 然后再次运行安装程序。下载安装程序*

上次更新时间: 2004 年 7 月 27 日
创建时间: 2004 年 7 月 27 日

ID: 19429
产品: Flash
版本: 2004
操作系统: 全部
浏览器: 全部
服务器: 全部
数据库:
以前的 ID: