舞台上加载一外部SWF,舞台如何调用该swf内部方法呢?

可以使用getDefinitionByName方法,也可以用ApplicationDomain的getDefinition方法,提供获取Class的方法如下:

  1. public function getClass(className:String, domain:ApplicationDomain = null):Class {
  2. if (domain == null) {
  3. domain = ApplicationDomain.currentDomain;
  4. }
  5. if (domain.hasDefinition(className)) {
  6. return domain.getDefinition(className) as Class;
  7. }
  8. return null;
  9. }
  10. var obj:Object = getClass("Called");
  11. obj.method();
评论 (0)链接 • 2011-11-04

  • 社区维基

    0 票

  • 杨凯冬
    1

一个Flash中通过AS3代码的Loader对象加载另一个SWF文件,并访问其中的文档类中的方法。
简单示例:

主文件:Main.fla, Main.as

被调用的文件:called.swf, Called.as

  1. package{
  2.  import flash.display.Sprite;
  3.  import flash.net.URLRequest;
  4.  import flash.display.Loader;
  5.  import flash.events.Event;
  6.  public class Main extends Sprite{
  7.  private var loader:Loader;

  8. public function Main(){
  9. loader = new Loader();
  10. loader.load(new URLRequest("called.swf"));
  11. loader.contentLoadInfo.addEventListener(Event.Complete, loadComplete);
  12. }

  13. private function loadComplete(e:Event):void{
  14. var obj:Object = loader.content; // 通过loader.content获取Called类对象,并赋值给Object对象

  15. obj.method(); //调用Called对象的method方法
  16. }
  17.  }
  18. }

被调用文件: Called.as

  1. package{
  2.  import flash.display.Sprite;
  3.  public class Called extends Sprite{
  4.  }
  5.  public function method():void{
  6. trace("Called对象中的method方法被调用了");
  7.  }
  8. }

---------------------输出结果-------------------------

Called对象中的method方法被调用了


值得提出注意的地方是obj.method(); 中的“.method(); ”是不能通过代码编辑器提示显示的。

如果希望能够在代码编辑器中显示,可以在主文件中增加一个接口类,并把加载的loader.content强制转换成该接口类的一个实例。

如var obj:CalledInterface=loader.content as CalledInterface;
其中CalledInterface是在主文件中定义的一个拥有被调SWF文档类的公开方法的接口类。这样就可以在代码编辑器中看到提示的方法了。

posted on 2013-12-19 15:35  风中雨2013  阅读(775)  评论(0编辑  收藏  举报

导航