1

出于好奇,我试图了解 Flex 应用程序使用的生命周期。

所以,我对这个论点做了一些研究;FlashPlayer 中使用的两个关键概念是:

  • SWF Frame:它是包含图形代码和as代码的逻辑单元
  • Flash Player Frame:Flash运行时更新屏幕的时间间隔,由frameRate属性定义

如果是这样,你能解释一下这两个概念之间的关系吗?特别是,它们是否配对在一起?

主要规则是:Flash Player 在 swf 中流式传输;在读取完整的 SWF 帧之前,Flash Player 无法呈现它。

我将尝试解释我需要理解的内容。为简单起见,假设您有一个两帧应用程序:SWF FR 1 和 SWF FR 2。

通常(例如在 CS4 中)一个框架被视为一个逻辑单元(由 ShowFrame 标记分隔),您可以在其中附加 as3 代码。这是一个 swf 文件的简化版本,我认为:

  • Header // 这里定义了 frameRate
  • 符号、类等... // 这是 FR1 === ShowFrame ===
  • 符号、类等… // 这是 FR2 === ShowFrame === End

如果您有两个帧,FR1 和 FR2,Flash 开始执行 FR1 并转到下一个 (FR2)。如果您不停止执行,Player 将通过无限循环执行并渲染包含在 FR1 和 FR2 中的代码。相反,当您停止执行时,例如在 FR2 中,flash 播放器会循环执行 FR2 中包含的代码。

那么,每个 SWF 帧可以多次播放 Flash Player 帧吗?

当 FR1 正在下载(FR1 未完全加载)时,是否有任何 enterFrame 事件?第一个 frameEvent 是否在 FR1 完全加载时发生?FR1 在什么时间段内渲染?另一种情况,如果您已将停止命令调用到 FR1 中,您将以您指定的速率获得 enterFrame(当前帧为 FR1)。同时FR2正在下载。完成后,您转到下一帧 (FR2)。FR2 在什么时间段内渲染?Flash Player 是否尝试将 FR2 渲染到其下一个时间间隔?

考虑这个简单的序列:

  1. FR1 正在下载
  2. FR1 已完全下载
  3. FR1调用stop()方法,同时FR2正在下载
  4. FR2 已完全下载
  5. 去FR2
  6. FR2 调用 stop() 方法
  7. 等等

当 Flash Player enterFrame 事件发生时,您能为我强调一下吗?

感谢您的时间。最好的问候, Flex_Addicted。

4

1 回答 1

0

虽然看起来你肯定一直在调查事情,但你的一些假设是不正确的。Flex 是编写到一个漂亮框架中的 Flash 代码。因此,一切都归结为帧,这些帧是代码执行和代码执行结果、渲染的混合体。当所有必需的代码都已执行并且渲染过程完成后,该帧就完成了,flash 播放器将继续下一帧。

那么你的 enterFrame 被调用。

现在,作为 Flex 开发人员,监听 enterFrame 事件并不常见。

要理解 Flex 应用程序,您只需将它们视为 Flash 应用程序,第一帧是加载帧,第二帧是应用程序。构成其余所有帧的是子部分及其各自的时间线。这个概念肯定会让人们感到困惑,因为他们认为 enterFrame 应该只被调用两次,事实并非如此。

许多人的下一个错误假设是,仅仅因为“没有代码正在执行”,帧仍然没有被调用。情况也并非如此。仅仅因为某些东西没有改变并不意味着帧没有被调用,并且 - 如果没有适当的检查 - 大量的处理不会发生。

高温高压

于 2009-12-21T15:34:10.520 回答