簡體   English   中英

加載swf並通過界面使用它

[英]Loading swf and using it through interface

我用接口創建了簡單的swf:

public class Test extends MovieClip implements ITest
{

    public function Test()
    {
        Security.allowDomain("*");
        Security.allowInsecureDomain("*");
    }

    public function speak(str):String
    {
        trace(str);
        return "yeah";
    }
}

ITest:

public interface ITest {

    // Interface methods:
    function speak(str):String
}

然后我正在嘗試加載它:

    public function SWFLoader() 
    {
        var url='http://xxxxxxxx/test.swf';
        var loadURL:URLRequest=new URLRequest(url);
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
        var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
        loader.load(loadURL, context);
    }

    private function completeHandler(event:Event):void 
    { 
        var test:ITest;
        test = event.target.content as ITest;
        test.speak("ggg");
    } 

因此,如果我在同一目錄(本地方式)中有test.swf,則工作正常。 但是,如果我將其放置在專用服務器上:(event.target.content為ITest)將返回null。 但是,我可以在沒有諸如event.target.content.speak(“ a!”);之類的接口的情況下訪問speak()。

如何解決這個問題呢?

如何在兩個瑞士法郎之間共享ITest接口?

我想您有兩個項目,一個用於test.swf(已加載的項目),另一個用於加載程序(我稱他為loader.swf)。 我認為您不能只兩次聲明ITest接口(一個用於test.swf,一個用於loader.swf)。 如果這樣做,將有兩個接口,它們具有相同的接口名稱,相同的聲明方法,但它們仍將是2個不同的接口。 而將彼此融合會失敗。
我敢打賭,如果您這樣做(如PatrickS建議)

var test:ITest = ITest(event.target.content ); 

您會看到類型錯誤->這就是這種形式的轉換的優勢。 這將證實我的想法:這兩個接口是不同的。

要真正共享兩個項目之間的接口,應將其存儲到一個庫(.swc文件)中,並在兩個項目中使用該庫。 這應該可以解決問題。

暫無
暫無

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

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