如何使用加载栏和swf的百分比创建这些“正在加载,请稍候”初始屏幕? as3是否有一些内置的方法,还是应该从头开始设计?as3加载屏幕
我的意思是,你如何检测到你的swf文件正在加载到客户端浏览器中?
哦,我只将所有内容存储在一个帧中。纯粹的as3代码。
如何使用加载栏和swf的百分比创建这些“正在加载,请稍候”初始屏幕? as3是否有一些内置的方法,还是应该从头开始设计?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!
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作为孩子添加。
或者,您可以将所有内容放在第2帧上,并保留在第1帧上,检查root.loaderInfo.bytesLoaded与root.loaderInfo.totalBytes值的比较,报告百分比,然后在完成时移动到第2帧。
就我个人而言,我认为方法1更好,因为你不需要用框架来玷污自己。
还有第三种方式,它使用一些奇怪的元数据标签来模拟第二种方式,但没有框架。这有点乱,但应该是可以googleable的。
Flash有它自己的组件,你可以用它来实现这一点:
或者你可以从头开始建立自己的进度条:
http://www.zedia.net/2008/the-right-way-to-do-a-preloader-in-as3/
有很多资源在网络上,您可以自定义进度条 - 浏览并找到适合您的编码风格。
谢谢,我想我会遵循这条路线。 – astralmaster 2012-07-11 20:36:16