1

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

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

哦,我所有的内容都只存储在一帧中。纯as3代码。

4

3 回答 3

2

如果你的所有代码都在时间线上,那么最简单的方法是制作第二个 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。

于 2012-07-11T20:26:43.753 回答
1

有几种不同的方法可以做到这一点。

您可以有一个两步过程 - 创建一个简单地加载到主文件中的 swf 文件,报告进度(通过侦听加载器上的进度事件),然后将加载的 swf 作为子文件添加。

或者,您可以将所有内容放在第 2 帧,并停留在第 1 帧,检查 root.loaderInfo.bytesLoaded 与 root.loaderInfo.totalBytes 值的比较,报告百分比,然后在完成后移至第 2 帧。

就个人而言,我认为方法 1 更好,因为你不需要用框架来玷污自己。

还有第三种方式,它使用一些奇怪的元数据标签来模拟第二种方式,但没有框架。这有点乱,但应该可以用谷歌搜索。

于 2012-07-11T20:09:03.077 回答
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/

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

于 2012-07-11T20:28:08.713 回答