as3加载屏幕

时间:2012-07-11 19:59:16

标签: actionscript-3 screen loading splash-screen

如何使用加载栏和swf的百分比创建这些“正在加载,请稍候”的启动画面? as3有一些内置方法还是应该从头开始设计?

我的意思是,您如何检测到您的swf文件被加载到客户端的浏览器中?

哦,我的所有内容仅存储在一个框架中。纯as3代码。

3 个答案:

答案 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://help.adobe.com/en_US/ActionScript/3.0_UsingComponentsAS3/WS5b3ccc516d4fbf351e63e3d118a9c65b32-7fa4.html

或者您可以从头开始构建自己的进度条:

http://www.zedia.net/2008/the-right-way-to-do-a-preloader-in-as3/

网上有很多资源可供您自定义进度条 - 浏览并查找适合您和您的编码风格的资源。