加载多个swf文件

时间:2013-08-02 18:32:15

标签: actionscript-3 preloader

像每个程序员一样,我面临着一个棘手的挑战,我希望有人能与我分享一些知识。 我正在创建一个游戏,对于每个游戏组件(如音频,视频,图片),我创建了一个swf文件(库)。在主文件中,我试图使用Loader类加载我的swf文件。 我想制作一个预加载器,我想计算从我的所有swf文件加载的字节百分比。我意识到同时加载3个加载器会让我的游戏变慢。我试图一次上传一个文件,但我不知道如何在不使用ProgressEvent的情况下捕获从我的文件加载的字节(这里我可以访问bytesTotal变量)。 有没有人遇到类似的问题,可以分享小费或链接? 问候和耶稣受难日!

2 个答案:

答案 0 :(得分:0)

我强烈推荐GreenSock's LoaderMax库。它简化并增强了整个过程。设置简单,体积小。

import com.greensock.*;
import com.greensock.loading.*;
import com.greensock.events.LoaderEvent;
import com.greensock.loading.display.*;

// Create a LoaderMax named "gameQueue" and bind onProgress, onComplete and onError listeners
var queue:LoaderMax = new LoaderMax({name:"gameQueue", onProgress:progressHandler, onComplete:completeHandler, onError:errorHandler});

// Append several loaders
queue.append( new XMLLoader("xml/data.xml", {name:"xmlDoc"}) );
queue.append( new ImageLoader("img/photo1.jpg", {name:"photo1", estimatedBytes:2400, container:this, alpha:0, width:250, height:150, scaleMode:"proportionalInside"}) );
queue.append( new SWFLoader("swf/child.swf", {name:"childClip", estimatedBytes:3000, container:this, x:250, autoPlay:false}) );
queue.append( new MP3Loader("mp3/audio.mp3", {name:"audio", repeat:2, autoPlay:true}) );

// Run
queue.load();

function progressHandler(event:LoaderEvent):void {
    trace("progress: " + event.target.progress);
}

function completeHandler(event:LoaderEvent):void {
    var image:ContentDisplay = LoaderMax.getContent("photo1");
    TweenLite.to(image, 1, {alpha:1, y:100});
    trace(event.target + " is complete!");
}

function errorHandler(event:LoaderEvent):void {
    trace("error occured with " + event.target + ": " + event.text);
}

您可以显示各个装载程序或装载程序组的进度。

为了准确 计算一组加载器的总体进度,了解每个子加载器的总文件大小(bytesTotal)非常重要。但是如果有些文件还没有开始加载,你的加载器怎么可能知道它们的大小呢?

没有TCP packet,它将告知您进度开始时的最终大小。

请记住:就像一个流。在文件准备好之前,你永远不会知道最终的大小!

new ImageLoader("1.jpg", {estimatedBytes:26000});

一个简单的解决方法:

  1. 生成列表,其中包含每个preloadable元素的url和总大小。您可以通过中的某些自动化执行此操作(例如),请检查此SO answer

  2. 使用LoaderMax预加载xml / json文件列表并在AS3中解析它。

  3. 从xml中加载所有文件并添加正确的文件大小。就是这样。

  4. 您可以找到完整的AS3文档here

答案 1 :(得分:-1)

开始加载文件,获取文件大小并在收到大小信息后立即关闭流。

然后根据需要逐个加载文件。

或者使用合并到代码库中编译主swf(如果这适合你)。