【问题标题】:How to determine the total number of "initProgress" events coming from the preloader?如何确定来自预加载器的“initProgress”事件的总数?
【发布时间】:2009-02-10 18:53:28
【问题描述】:

闪存预加载器会发出FlexEvent.INIT_PROGRESS 事件以指示闪存应用程序初始化的进度。但是,调度此事件的次数取决于应用程序本身。

我试图确定这个数字,但我在 Flex 文档中找不到答案,所以现在我求助于实验。更糟糕的是,在我看来,这个数字会不时变化,即使 Flash 文件未修改。

是否有一种编程方式可以至少给出这个值的估计值?

编辑:我正在使用此信息在预加载器中显示进度条。实际上,我显示了两个,一个在下载程序时显示,另一个在初始化时显示。

【问题讨论】:

    标签: flash actionscript-3 event-handling preloader


    【解决方案1】:

    不要太担心总数,根据我的经验,这应该会发生得如此之快,以至于没有必要完全准确。如果你做了一些测试,发现它最多计数到 14,那么只需手动将进度条设置为最多 20 个。用户仍然会看到进度条很快填满,因为它不会在屏幕上显示很长时间, 没有人关心它是否完全准确。

    【讨论】:

      【解决方案2】:

      mx.preloaders.DownloadProgressBar 类使用了看似任意的值 12:

      private var _initProgressTotal:uint = 12;
      
      // [...]
      
      protected function initProgressHandler(event:Event):void
      {
          // [...]
      
          var loaded:Number = 100 * _initProgressCount /
          (_initProgressTotal - _displayStartCount);
      
          // [...]
      }
      

      我不知道他们从哪里获得了这个价值,但它似乎对 Adob​​e 来说足够好......?

      【讨论】:

        【解决方案3】:

        也许每次初始化组件时都会触发该事件?

        如果您告诉我们您到底想做什么,也许会有所帮助。我们可以尝试寻找替代解决方案。

        【讨论】:

        • 我的组件肯定多于 14 个(我目前对 init_progress 的估计数)。以这种方式报告哪些组件的初始化?
        • 一个很好的问题。恐怕我帮不了你。但也许我可以帮助寻找替代解决方案。
        【解决方案4】:

        您的进度条应该基于 bytesLoaded / bytesTotal,而不是调用处理程序的次数。

        例如:

        preloader.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onPreloaderProgress);
        

        然后,在您的处理程序中,执行以下操作:

        function onPreloaderProgress(e:ProgressEvent):void
        {
            progress = e.bytesLoaded / e.bytesTotal;
        }
        

        【讨论】:

        • 这是下载进度,不是初始化进度。
        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 2012-01-06
        相关资源
        最近更新 更多