2012-12-09 38 views
0

我正在處理一個Flash GUI項目,該項目有許多圖像需要在運行時動態加載。在運行時使用外部文件創建SWC圖像/文件庫

問題: 目前每次一類初始化時,它加載其資產(圖像)從硬盤,但通常需要太長時間(例如:我有100個項目的列表,每個項目都有相同的背景,這是存儲在HDD上的PNG圖像,但它必須從HDD上載圖像100次才能呈現列表,因爲該項目的類將被初始化100次)。另外,我希望資產對用戶隱藏,所以我想把它打包成一個文件。

解決方案: 我想到了SWC。我聽說這是Flash的庫。但我幾乎沒有與SWC合作的經驗。而且有太多的圖片,需要很長時間才能手動導入併爲FLA庫中的每個圖片添加類名稱。但是我已經有了一個XML文件,它存儲了每個類的資產的類名和路徑。所以我可以將所有圖像加載到變量中,但我不知道如何將該變量實際寫入HDD上的SWC文件,以便稍後將其作爲庫加載。

[MyButton.png] - 負載到RAM - > [myButton的:位圖] - 寫入SWC文件上HDD - > [Assets.swc] - 導入SWC文件在運行時 - > [addChild(assets.myButton)]

粗體文本是我錯過的部分。

謝謝你的時間!任何幫助是極大的讚賞。

回答

0

SWC是一個「預編譯」的文件,它與swf幾乎相同,但實際上並非「即時創建」的文件。最大的區別在於,swc是「編譯成」swf而不是動態加載的東西。也就是說,你不能在運行時加載一個swc文件,它是在編譯期間提供的。

所以,添加到swc中的每張圖片都會增加它的大小,好處是它可以在不同的swf文件之間共享。

現在,糾正我,如果我明白你錯了,但它似乎是你從硬盤驅動器重新加載圖片時,無論何時使用該圖片?因此,與圖片「Ball.png」鏈接的100個「Ball」實例會將該文件加載100次?

如果是這種情況,爲什麼不創建一個ImageManager並讓它保留加載圖像的一個實例,然後在使用該圖像的所有實例之間共享它?

AFAIK有沒有簡單的方法來做到這一點,但是我寫了一篇博客文章(因爲我找不到更好的方法來給你這個解決方案),如果你對緩存加載圖像的例子感興趣。

這是非常天真的,圍繞一個靜態ImageManager,只加載圖像,緩存它們的url-id,然後提供一個新的位圖數據實例,如果他們已經加載。然而,它像一個魅力一樣工作,它比總是從硬盤加載圖像更高效。

你可以在這裏找到這篇博文:http://messer1024.blogspot.se/2012/12/caching-loaded-images-in-as3.html

+0

非常感謝你的回答。我想到了類似的方法,但我也需要將這些圖像存儲在單個文件中,並且可能會被密碼保護或具有某種保護。你會建議任何一種資產包裝方法嗎? –

+0

如果需要,您可以使用zip文件並在加載後解壓縮它們。這可能是最簡單的方法,取決於他們是否改變了很多。如果他們改變了很多,那麼最好的辦法是處理每個圖像或圖像的子集,然後使用緩存(如果它通過互聯網分發的話)。否則,一個zip文件可能對您的目的有好處 –

+0

不記得我最後使用的是哪個zip工具,但如果我沒有記錯的話,使用這種策略相當容易 –