了解Flex应用程序和框架

时间:2009-12-14 22:53:11

标签: flex frame lifecycle frame-rate

在好奇心的驱使下,我正在努力了解Flex应用程序使用的生命周期。

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

  • SWF框架:它是包含图形代码和代码的逻辑单元
  • 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 === 结束

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

那么,每个SWF帧可以多次发生Flash Player帧吗?

下载FR1时(FR1未完全加载)是否有任何enterFrame事件? FR1完全加载时是否会发生第一个frameEvent? 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. 等等
  8. 当你进行Flash Player enterFrame事件时,你可以向我强调一下吗?

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

1 个答案:

答案 0 :(得分:0)

虽然看起来你肯定在调查事物,但你的一些假设是不正确的。 Flex是将Flash代码写入一个漂亮的框架。所以一切都归结为框架,这些框架是代码执行的混合,以及代码执行,渲染的结果。当所有必需的代码都已执行并且渲染过程完成后,框架就完成了,flash播放器会移动到下一帧。

然后调用你的enterFrame。

现在,作为一名Flex开发人员,通常不会监听enterFrame事件。

要了解Flex应用程序,您只需要认为它们是Flash应用程序,第一帧是加载框架,第二帧是应用程序。它是子部件及其各自的时间线,构成了所有其余的框架。这个概念肯定让人困惑,因为他们认为只能调用两次enterFrame,情况并非如此。

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

HTH