AS3:位于外部swf的外部类中的访问功能

时间:2011-10-22 23:21:25

标签: actionscript-3 oop class dynamic

我正在尝试访问具有外部类的已加载swf中的函数。 我想避免将该函数放在外部swf中的“Main”Doc类中 而是直接从类

访问该函数

到目前为止,这是我尝试过的,这是一个没有骰子的事情:

 private function startLoad(){
        var loader:Loader = new Loader();
        var req:URLRequest = new URLRequest("one.swf");
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
        loader.load(req);

    }
 private function onLoadComplete(e:Event):void{
        var ClassDefinition:Class = e.target.applicationDomain.getDefinition("com.view.Creative") as Class;
        var butn:MovieClip = new ClassDefinition(0,0);////0,0 is x and y cordinates I have in the "com.view.Creative" class

        this.addChild(butn);
        butn.setVar("one");////"setVar" is the function in my external swf with the class "com.view.Creative"
    }

这是com.view.Creative.as中的函数

  public var storedVar:String

  public function setVar(str:String):void{
               this.storedVar = str;
               trace(storedVar)
    }

//返回“ReferenceError:错误#1069:在com.view.Creative上找不到属性setVar,并且没有默认值。”

这是我采取的另一种方法,但没有成功

  private function startLoad(){
        var appDomain:ApplicationDomain = new ApplicationDomain();
        var context:LoaderContext = new LoaderContext(false, appDomain);
        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
        loader.load(new URLRequest("one.swf"), context);


    }

  private function completeHandler(event:Event):void { 
        var myGreet:Class = ApplicationDomain.currentDomain.getDefinition("com.view.Creative") as Class;                
        var app : MovieClip = new myGreet(0,0)
        addChild(app);
        app.setVar("one");////set var is the function in my external swf with the class "com.view.Creative" I am trying to access
        //event.target.content.setVar("one");///this works if I am placing my "setVar" function on my "Main" Doc Class which I am trying to avoid///

    }

这是com.view.Creative.as中的函数

   public var storedVar:String

   public function setVar(str:String):void{
               this.storedVar = str;
               trace(storedVar)
    }

//返回“ReferenceError:错误#1069:在com.view.Creative上找不到属性setVar,并且没有默认值。     在com.util :: ClickArea / completeHandler()“

必须有一个解决方案.....谢谢先进!

1 个答案:

答案 0 :(得分:1)

在第二种情况下试试这个:

 var myGreet:Class = event.target.applicationDomain.getDefinition("com.view.Creative") as Class;  

event.target是您的contentLoaderInfo。

如果您将swf加载到新的ApplicationDomain中,则无法在currentDomain中查找定义。

在第一种情况下,也许您已经在此别名下使用了Creative类,但使用了不同的参数,当您将swf加载到currentDomain时,类:“com.view.Creative”不会覆盖现有的,而是从主swf返回类。 / p>