因爲您的SWF位於Web服務器上,您是否預加載?如果是這樣,則一種選擇是從服務器預加載字節,而不使用URLLoader實際解釋它們。然後,當您需要顯示MovieClip時,使用Loader.loadBytes將預加載的字節(URLLoader.data)注入Loader以實際實例化MovieClip(並開始播放,聲音和全部)。實例化時可能會有一點滯後,但比沒有預加載器要少得多。
根據您對loader.content類型的問題:
package
{
import flash.display.Sprite;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
public class tst extends Sprite
{
[Embed(source="any_image.png", mimeType="application/octet-stream")]
private var img_bytes:Class;
[Embed(source="any_swf.swf", mimeType="application/octet-stream")]
private var swf_bytes:Class;
public function tst():void
{
var b1:ByteArray = new img_bytes();
var l1:Loader = new Loader();
l1.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace(getQualifiedClassName(l1.content));
trace(l1.content is Bitmap);
});
l1.loadBytes(b1);
var b2:ByteArray = new swf_bytes();
var l2:Loader = new Loader();
l2.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace(getQualifiedClassName(l2.content));
trace(l2.content is MovieClip);
});
l2.loadBytes(b2);
}
}
}
(注意:這僅僅是示範代碼 - 切勿用函數閉包這樣的添加事件偵聽器,就會造成內存泄漏,我也跳過URLLoader,並簡單地嵌入來獲取我的字節,但它們是相同的字節)。
,輸出是:
flash.display::Bitmap
true
test_fla::MainTimeline
true
然而,位圖和影片剪輯是不是loader.content唯一的選擇 - 從加載代碼編譯的SWF可以從雪碧中導出,並且可以顯示完整的類名稱,儘管www0z0k指出,它們都是從DisplayObject派生的。儘管我相信Flash Professional的任何SWF輸出都始自MovieClip。
根據您的注意,裝載機字節始終是影片剪輯
事實證明你是對的 - 加載一個普通的舊圖像的加載器,contentLoaderInfo.bytes屬性包含生成的SWF是字節一個簡單的MovieClip包裝器,其圖像爲Child。誰會猜到?!
var l3:Loader = new Loader();
l3.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace("- l3:");
trace(getQualifiedClassName(l3.content));
trace(l3.content is Bitmap);
// This ByteArray is a SWF!
var b3:ByteArray = l3.contentLoaderInfo.bytes;
var l4:Loader = new Loader();
l4.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void {
trace("- l4:");
trace(getQualifiedClassName(l4.content));
trace(l4.content is Bitmap);
trace(Object(l4.content).getChildAt(0) is Bitmap);
});
l4.loadBytes(b3);
addChild(l4);
});
l3.load(new URLRequest("any_image.png"));
輸出是:
- l3:
flash.display::Bitmap
true
- l4:
flash.display::MovieClip
false
true
這正是諸如此類的事情,我一直在尋找。 – 2012-04-23 18:20:12
相關問題:如果我實際上沒有加載對象,那麼確定它是否應該是圖像的最佳方法是什麼?我注意到過去加載一個圖像數據的字節數組會產生一個影片剪輯。 – 2012-04-23 18:23:56
我不確定我是否完全理解你的問題,但是你在使用Loader.loadBytes後會得到一個Event.COMPLETE,在這個時候Loader。內容應該是位圖(例如,如果字節是JPEG或PNG)或MovieClip(如果字節是SWF),那麼您應該知道您是否可以與它進行交互(停止/播放)。 – 2012-04-23 20:31:48