簡體   English   中英

AS3,在SWF中加載為自定義類型

[英]AS3, loading in a SWF as a custom type

這里的基本問題。 通常在AS3中,您通過Loader加載SWF,而您獲得的是某種類型為“Loader”的偽MovieClip。

假設SWF是使用自定義類型的基類發布的,那么在陽光下是否有任何神聖的方式將此加載的SWF強制轉換為擴展MovieClip而不是Loader的自定義類型? 沒有數據丟失?

或者,假設你不能,你甚至可以從擴展Loader本身的自定義類型轉換它嗎?

你可以這樣做:

存根swf中的代碼:

package {

    import flash.display.MovieClip;

    public class Stub extends MovieClip implements IStub {

        public function Stub() {
            trace("Stub::ctor");
        }

        public  function traceIt(value:String):void {
            trace("Stub::traceIt " + value);
        }
    }
}

我正在使用一個界面,但它並不是嚴格必要的。

package {

    public interface IStub {

        function traceIt(value:String):void;

    }
}

代碼在“主要”瑞士法郎。

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT,handleInit);
loader.load(new URLRequest("Stub.swf"));

function handleInit(e:Event):void {
    var stub:Stub = loader.content as Stub;
//  or, using an interface 
//  var stub:IStub = loader.content as IStub;
    stub.traceIt("testing");
}

根據LiveDocs中本文的評論,您可以將Loader.content強制轉換為MovieClip並以此方式訪問它。

但是,有一些限制。 例如,SWF本身必須是AS3 SWF文件,並且執行加載的SWF和正在加載的SWF應該共享相同的沙箱。

是的,loader.content讓您可以訪問所加載的內容。 你應該能夠簡單地把它變成你想要的。

或者,您可以選擇擴展Loader,它已經擴展了DisplayObjectContainer,因此您可以開始使用MovieClip的大部分功能。 在這種情況下,寫它,這樣你就可以簡單地調用MyCustomClass.load(swf here),它應該做你需要它。

我希望有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM