如何使用加载栏和swf的百分比创建这些“正在加载,请稍候”的启动画面? as3有一些内置方法还是应该从头开始设计?
我的意思是,您如何检测到您的swf文件被加载到客户端的浏览器中?
哦,我的所有内容仅存储在一个框架中。纯as3代码。
答案 0 :(得分:1)
有几种不同的方法可以做到这一点。
你可以有两个步骤 - 创建一个swf文件,只需在主文件中加载,报告进度(通过监听加载器上的progress-event),然后将加载的swf作为子进程添加。
或者,您可以将所有内容放在第2帧上,并保留在第1帧,检查root.loaderInfo.bytesLoaded与root.loaderInfo.totalBytes值相比较,报告百分比,然后在完成时转到第2帧。
就个人而言,我认为方法1更好,因为你不需要自己使用框架。
还有第三种方法,它使用一些奇怪的元数据标签来模拟第二种方式,但没有帧。它有点乱,但应该是可谷歌的。
答案 1 :(得分:1)
如果您的所有代码都在时间轴上,那么最简单的方法是制作第二个仅用于加载主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!
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。
答案 2 :(得分:0)
Flash有自己的组件可用于实现此目的:
或者您可以从头开始构建自己的进度条:
http://www.zedia.net/2008/the-right-way-to-do-a-preloader-in-as3/
网上有很多资源可供您自定义进度条 - 浏览并查找适合您和您的编码风格的资源。