flash制作一个完整的loading


flash制作一个

  loading这个东西,说穿了其实是给消费者反馈的一种 体现 模式,在客户端中的loading,通常以鼠标的手型 变迁来 体现;而在web端,loading的创意则层出不穷了,并且给消费者的反馈更好 。本文将重要 阐述在flash中制作loading的一些问题 。

  先来看看loading的原理 。在flash中,制作loading的 目标是为了预先加载一 部分内容(你 可以 取舍所有加载 结束,或者加载一 部分之后), 而后再把flash的重要内容 展示出来 。普通来讲,loading是放在第一帧上面的(也 可以不放在第一帧, 比方放在任意一帧,然而在第一帧你要做个跳转,让播放头到loading的那一帧去) 。这里要 留神一个问题,如果你的flash程序有从元件库里导出元件的话(默许为第一帧导出),要导出的原件所有加载 结束之后才会显示第一帧的内容(即,你的loading) 。这样的话很可能你在第一帧导出的内容过于 宏大,占领了整个flash 利用的很大一 部分, 比方50%,那么我们实际运行的 动机便是在一段空白之后loading从50%处开始显示 。

  要幸免上面的问题(一个显而易见的不好的消费者体验),通常来讲我会用到两种 步骤:

  第一,把要导出的元件 取缔导出,把它们集中放在某一帧(除开你做loading的那一帧), 而后在放元件的这一帧之后的那一帧开始运行你的程序 。

  第二,用另个一个swf来加载需求做loading的swf 。这种 步骤 可以有 比较 完全的加载进度条以及百分比文字,缺陷是方便引起 其余问题,这个后面会 探讨 。

  举个例子来说,我想为A.swf做一个loading, 要害代码如下:

......

  this. loaderInfo. addEventListener (SPANrogressEvent. SPANROGRESS,loadSPANrogress );

  this. loaderInfo. addEventListener (Event. COMSPANLETE,loadComSPANlete );

......

  AS3.0中增加了一个新的loaderInfo类来提供已加载的swf、图像文件的信息 。flashplayer通过调度ProgressEvent对象的loadProgress 步骤来实现对加载内容反馈的监听,当加载所有 实现后,flashplayer再调度Event对象的loadComple 步骤 。loadProgress 步骤是我定义的监听加载进度的 步骤,所有有关加载的信息都 可以在这个 步骤中加以反馈:

......

  SPANrivate functionLoadSPANrogress ( e:SPANrogressEvent )

  {

  var loaded:uint= e. bytesLoaded;

  vartotal:uint= e. bytesTotal;

  varSPANercent: Number= int ( ( loaded /total ) * 100 );

  trace (SPANercent+ "%" );

  }

......

  上面的代码输出正在载入内容的百分比,这是一种最 方便的反馈,然而你 可以在这段代码里 丰硕你的loading的内容,使其更 存在趣味性,以使得消费者在期待下载的时候能清楚的晓得下载的进度,或者在这时候欣赏一段精美的动画——这 彻底取决于你的设计 。这时候加载 实现了, 可以执行loadComplete这个 步骤了 。在loadComplete 步骤里增加你想要的动作, 比方给消费者一个播放按钮以使得消费者 可以自主 取舍,或者直接进入某一帧进行播放 。

  前面说过,直接在swf上增加loading可能会招致loading不是从1%开始,这时候 可以用一个swf加载另一个swf的 步骤来实现 完全的loading, 比方,我想在B.swf里加载A.swf,那么在B.swf的程序里 使用loader加载A.swf 。需求 留神的是,监听loader的加载进度需求 使用loader的contentLoaderInfo属性,而不是loaderInfo 。对于loaderInfo和contentLoaderInfo的关系如下图所示:

flash制作一个

  由于B.swf只起到加载A.swf的作用,并没有 其余显示内容,所以它 本身的加载 可以 忽略不计,这种 步骤 可以 比较 完全的 展示A.swf的加载过程 。然而,同时 使用这种 步骤也激发了一些问题, 比方你在A.swf里与web端进行通讯, 使用了loaderInfo的parameters属性,则你在用B.swf加载A.swf后,通讯将失效 。这是由于FlashVars HTML 参数只影响主swf(例子里为B.swf),便是说你 可以在B.swf里 实现通讯,然而A.swf不行 。所以,我们 可以先在B.swf中猎取到页面要传递的信息, 而后再让A.swf从B.swf中猎取这个信息就 可以了 。通常我是这样 解决的,如果B.swf的文档类为Main.as,那么在Main.as中定义一个static的属性 比方prama(public static var prama),用来 保留传递的信息, 而后再在A.swf中通过Main.prama猎取这个信息 。这样就 直接实现了A.swf与web端的通讯 。

  综上所述,本文不是向大家介绍如何制作一个 完全的loading的,相信loading的例子在网上并不少见,然而惟独清楚了loading制作的 根本原理, 威力从 根本上制作出更为 标准和 友爱的loading来 。