2011-05-12 20 views
3

我正在使用Flash CS5/AS3进行游戏,并试图让我的预加载程序正常工作。目前,当我使用'模拟下载'加载SWF文件时,文件将加载,但是我的预加载器不会显示。预加载程序确实显示了装载量在90%左右时的情况。Flash预加载程序仅在90%时启动

我没有选择'导出到第一帧',因为这是互联网告诉我做的事情,但是对于几乎每个版本的Flash/AS都有很多不同的教程,不知道如何解决这个问题。

我的预加载代码如下:

stop(); 

this.addEventListener(Event.ENTER_FRAME, loading); 

function loading(e:Event):void{ 

var total:Number = this.stage.loaderInfo.bytesTotal; 
var loaded:Number = this.stage.loaderInfo.bytesLoaded; 

percent_txt.text = Math.floor((loaded/total)*100)+ "%"; 

if (total == loaded){ 
play(); 
this.removeEventListener(Event.ENTER_FRAME, loading); 
} 

} 

不知道这是任何帮助,但。希望有人知道一个快速解决方案。我在某处读到这可能与声音文件有关(我确实有这些),但是,不太确定从哪里开始。

提前致谢!

+0

可能你仍然在第一帧中引用重量。如果您使用的是Windows,则可以尝试使用SWix(http://swixkit.com)分析swf。查找SymbolClass内容。 – alxx 2011-05-12 11:33:47

回答

0

当您编译&运行您的应用程序时,单击查看,然后单击菜单中的带宽分析器。这可以让你看到每帧的数据在这个帧上加载了多少数据。如果你的第一帧超过30kb左右,那么你有问题。尽量让你的preloader尽可能简单(没有图片等)。也就像你说的那样,确保你已经取消了所有资产的“第1帧导出”。我想用root.loaderInfo代替this.stage.loaderInfo

stop(); 

var total:uint = root.loaderInfo.bytesTotal; 
var loaded:uint = 0; 

addEventListener(Event.ENTER_FRAME, loading); 
function loading(e:Event):void 
{ 
    loaded = root.loaderInfo.bytesLoaded; 
    percent_txt.text = Math.floor((loaded/total)*100)+ "%"; 

    if(total >= loaded) 
    { 
     removeEventListener(Event.ENTER_FRAME, loading); 
     play(); 
    } 
} 
2

如果你有你的主时间轴的第1帧,在所有的任何内容,你将永远无法预加载的内容 - 你的电影才会开始第1帧播放一旦内容被加载。尝试将所有不必要的“东西”移动到第2帧,并将该帧设置为动作的输出帧。您现在应该在90%之前看到您的预加载器。完成预加载后,使用gotoAndPlay(2)将电影发送到第2帧。

或者(也许是一种最佳实践),制作一个“加载程序”SWF,其唯一的功能是加载你的主要瑞士法郎。将你的预加载器放入该加载器的swf中,并将其他所有内容保存在主SWF中。使用Loader类或BulkLoader等第三方加载库加载主SWF,并在加载完成后将其放置在舞台上。

希望有帮助。

相关问题