2013-08-02 129 views
1

就像每個程序員一樣,我面臨一個棘手的挑戰,我希望有人能與我分享一些知識。 我創建了一個遊戲,併爲每個遊戲組件(如音頻,視頻,圖片)創建了一個swf文件(庫)。在主文件中,我試圖使用Loader類加載我的swf文件。 我想做一個預加載器,我想計算從我所有的SWF文件加載的字節的百分比。我意識到在同一時間加載3個裝載機會讓我的遊戲變慢。我試圖一次上傳一個文件,但我不知道如何在不使用ProgressEvent(這裏我可以訪問bytesTotal變量)的情況下捕獲從我的文件加載的字節。 有沒有人遇到類似的問題,可以分享小費或鏈接? 問候和星期五好!加載多個swf文件

+0

你需要得到swf加載的總字節數? –

回答

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. 生成列表中,包含URL,並且每個預加載的元件的總大小。您可以在(例如)中使用一些自動化功能來執行此操作,請檢查此SO answer

  2. 用LoaderMax預載xml/json文件列表並在AS3中解析它。

  3. 加載xml中的所有文件並添加正確的文件大小。而已。

你可以找到完整的AS3文檔here

+0

昨天我測試過了,cept0。但是,當它加載多個文件時,它並不知道我的裝載機具有多大的尺寸。它加載第一個文件直到它達到100%,接下來,第二個文件等我可以看到它使用debuger。有沒有辦法LoaderMax加載所有的文件,而無需在ProgressEvent方法上重新啓動「進度值」?對不起,我英語不好。 – rennanreis

+0

我編輯了我的答案。希望這些幫助你。 – mate64

+0

我會試試。感謝您的幫助。 – rennanreis

-1

開始載入文件,獲取文件大小並在收到大小信息後立即關閉流。

然後根據需要逐個加載文件。

或者編譯你的主swf併合併入代碼庫(如果這適合你的話)。

+0

如何編譯合併到代碼庫user1875642中的主SWF文件? – rennanreis

+0

如果你的圖書館只包含資產(我想這是你的情況),你可以將它們包含到你的主要swf中嵌入(http://actionscriptexamples.com/2008/10/26/embedding-images-into-a-flash -document-使用最嵌入的元數據/)。如果您的庫包含您使用的一些代碼,那麼有一個編譯器選項可將庫合併到代碼中(http://help.adobe.com/zh_CN/flash/cs/using/WS3e7c64e37a1d85e1e229110db38dec34-7fa4a.html)。 – user1875642