您如何为您的 swf 创建这些带有加载栏和百分比的“正在加载,请稍候”启动画面?as3 有一些内置方法还是应该从头开始设计?
我的意思是,您如何检测到您的 swf 文件正在加载到客户端的浏览器中?
哦,我所有的内容都只存储在一帧中。纯as3代码。
您如何为您的 swf 创建这些带有加载栏和百分比的“正在加载,请稍候”启动画面?as3 有一些内置方法还是应该从头开始设计?
我的意思是,您如何检测到您的 swf 文件正在加载到客户端的浏览器中?
哦,我所有的内容都只存储在一帧中。纯as3代码。
如果你的所有代码都在时间线上,那么最简单的方法是制作第二个 swf,它只用于加载你的主 swf。如果调用了主 swf main.swf
,则加载 swf 中的代码将如下所示:
//make a loader
var loader:Loader = new Loader()
//listen for loading progress
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
//listen for when the load is finished
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
//load begins...
loader.load(new URLRequest("main.swf"));
function onProgress(event:ProgressEvent):void
{
//calculate how much has been loaded
var percentageLoader:Number = event.bytesLoaded / e.bytesTotal;
//use your percentage number here to drive a loader bar graphic
}
function onComplete(event:Event):void
{
//remove listeners now that loading is done
loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress);
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
//add loaded swf to the stage
addChild(loader.content);
}
顺便说一句,将您的资产外部化开辟了新的预加载可能性。您可以让主 swf 加载外部资产并预加载这些资产,而不是将所有内容都放在主 swf 中。由于您的主 swf 会变小,因此没有必要仅使用第二个 swf 来加载您的主 swf。
有几种不同的方法可以做到这一点。
您可以有一个两步过程 - 创建一个简单地加载到主文件中的 swf 文件,报告进度(通过侦听加载器上的进度事件),然后将加载的 swf 作为子文件添加。
或者,您可以将所有内容放在第 2 帧,并停留在第 1 帧,检查 root.loaderInfo.bytesLoaded 与 root.loaderInfo.totalBytes 值的比较,报告百分比,然后在完成后移至第 2 帧。
就个人而言,我认为方法 1 更好,因为你不需要用框架来玷污自己。
还有第三种方式,它使用一些奇怪的元数据标签来模拟第二种方式,但没有框架。这有点乱,但应该可以用谷歌搜索。
Flash 有自己的组件,您可以使用它来完成此操作:
或者您可以从头开始构建自己的进度条:
http://www.zedia.net/2008/the-right-way-to-do-a-preloader-in-as3/
网络上有很多资源可让您自定义进度条——浏览并找到适合您和您的编码风格的资源。