闪存预加载器发出FlexEvent.INIT_PROGRESS
事件以指示闪存应用程序初始化的进度。但是,调度此事件的次数取决于应用程序本身。
我试图确定这个数字,但在 Flex 文档中找不到答案,所以现在我求助于实验。更糟糕的是,在我看来,这个数字会不时变化,即使闪存文件未修改。
有没有一种程序化的方式来至少估计这个值?
编辑:我正在使用此信息在预加载器中显示进度条。实际上,我显示了两个,一个在下载程序时显示,另一个在初始化时显示。
闪存预加载器发出FlexEvent.INIT_PROGRESS
事件以指示闪存应用程序初始化的进度。但是,调度此事件的次数取决于应用程序本身。
我试图确定这个数字,但在 Flex 文档中找不到答案,所以现在我求助于实验。更糟糕的是,在我看来,这个数字会不时变化,即使闪存文件未修改。
有没有一种程序化的方式来至少估计这个值?
编辑:我正在使用此信息在预加载器中显示进度条。实际上,我显示了两个,一个在下载程序时显示,另一个在初始化时显示。
该类mx.preloaders.DownloadProgressBar
使用看似任意的值 12:
private var _initProgressTotal:uint = 12;
// [...]
protected function initProgressHandler(event:Event):void
{
// [...]
var loaded:Number = 100 * _initProgressCount /
(_initProgressTotal - _displayStartCount);
// [...]
}
我不知道他们从哪里得到这个价值,但它似乎对 Adobe 来说足够好......?
不要太担心总数,根据我的经验,这应该发生得如此之快,以至于没有必要完全准确。如果您进行了几次测试,发现它最多计数到 14,那么只需手动将进度条设置为最多 20 个。用户仍然会看到进度条很快填满,因为它不会在屏幕上显示很长时间, 没有人关心它是否完全准确。
也许每次初始化组件时都会触发该事件?
如果您告诉我们您到底想做什么,也许会有所帮助。我们可以尝试寻找替代解决方案。
您应该将进度条基于 bytesLoaded / bytesTotal,而不是调用处理程序的次数。
例如:
preloader.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onPreloaderProgress);
然后,在您的处理程序中,执行以下操作:
function onPreloaderProgress(e:ProgressEvent):void
{
progress = e.bytesLoaded / e.bytesTotal;
}