像每个程序员一样,我面临着一个棘手的挑战,我希望有人能与我分享一些知识。 我正在创建一个游戏,对于每个游戏组件(如音频,视频,图片),我创建了一个swf文件(库)。在主文件中,我试图使用Loader类加载我的swf文件。 我想制作一个预加载器,我想计算从我的所有swf文件加载的字节百分比。我意识到同时加载3个加载器会让我的游戏变慢。我试图一次上传一个文件,但我不知道如何在不使用ProgressEvent的情况下捕获从我的文件加载的字节(这里我可以访问bytesTotal变量)。 有没有人遇到类似的问题,可以分享小费或链接? 问候和耶稣受难日!
答案 0 :(得分:0)
我强烈推荐3>你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
,它将告知您进度开始时的最终大小。
请记住:get就像一个流。在文件准备好之前,你永远不会知道最终的大小!
new ImageLoader("1.jpg", {estimatedBytes:26000});
一个简单的解决方法:
答案 1 :(得分:-1)
开始加载文件,获取文件大小并在收到大小信息后立即关闭流。
然后根据需要逐个加载文件。
或者使用合并到代码库中编译主swf(如果这适合你)。