as3项目要调用外部swf里的类有3种方法:

  1.将外部的swf发布为swc,使用时将swc引用添加到相应的项目中,这应该是最简单的一种引用。不过当项目中的类或组件比较多时就会使项目发布生成的swf文件大小过大;

  2.通过资源绑定外部的,然后直接通过类名获取。如:[Embed(source="assets/icon/skin.swf",symbol="Btn_Max")],这种方法也会引起swf文件过大;

  3.通过域来来获取外部swf里的绑定类,这种方法可以在需要用时才去加载相应的swf文件然后再获取所需要的类。

  下面是根据第三种方法来获取所需要的类:

package com.mobiano.flipbook.pageeditor
{import com.flasht.tui.display.TArrow;import com.mobiano.flipbook.config.FlipBookConfig;import com.tflash.Components.util.SWFLoader;import flash.display.DisplayObject;import flash.errors.IOError;import flash.events.Event;import flash.events.IOErrorEvent;import flash.events.ProgressEvent;import flash.utils.Dictionary;public class PlugInManager{public static var allExternalClass:Object={};//public var loadingQueue:Object={};//public var swfLoader:SWFLoader;public var loadingQueue:Dictionary=new Dictionary();private static var canInstace:Boolean=false;private static var instace:PlugInManager;private var filePrefix:String="./files/pageConfig/";private var fileSuffix:String=".swf";public function PlugInManager(){if(!canInstace){throw new Error("Can't new PlugInManager"); }}public static function getInstace():PlugInManager{if(instace==null){canInstace=true;instace=new PlugInManager();canInstace=false;}return instace;} public function getComponent(target:TAnnoPlugIn,cpName:String,extClassName:String):void{if(cpName==null||cpName.length<1||extClassName==null||extClassName.length<1)return ;if(allExternalClass.hasOwnProperty()){//return allExternalClass[cpName];var swfLoader:SWFLoader=allExternalClass[cpName];var cl:Class=swfLoader.GetClass(extClassName);if(cl!=null){var extObj:IPlugInInterface=createSWFClass(cl);if(extObj!=null){target.extObj=extObj;}}}else{load(target,cpName,extClassName);}//return null;}public function getSwfUrl(cpName):String{if(cpName!=null){return filePrefix+cpName+fileSuffix;}return null;}protected function getURLFrom(url:String):String{return com.mobiano.flipbook.config.FlipBookConfig.getURLForm(url);}private function load(target:TAnnoPlugIn,cpName:String,extClName:String):void{var swfUrl:String=getSwfUrl(cpName);if(swfUrl==null||swfUrl.length<1)return;swfUrl=getURLFrom(swfUrl);var swfLoader:SWFLoader=new SWFLoader(swfUrl);swfLoader.addEventListener(Event.COMPLETE,onComplete);swfLoader.addEventListener(ProgressEvent.PROGRESS,onProgress);swfLoader.addEventListener(IOErrorEvent.IO_ERROR,onIOError);var obj:Object={target:target,compontName:cpName,extClassName:extClName};//loadingQueue[cpName]=obj;loadingQueue[swfLoader]=obj;swfLoader.Load();}private function onComplete(evt:Event):void{trace(evt.currentTarget);if(evt.currentTarget is SWFLoader){var loader:SWFLoader=evt.currentTarget as SWFLoader;if(loader in loadingQueue){var obj:Object=loadingQueue[loader];if(obj["target"]&&obj["compontName"]&&obj["extClassName"]){var cpName:String=obj["compontName"];var extClassName:String=obj["extClassName"];allExternalClass[cpName]=loader;var cl:Class=loader.GetClass(extClassName);var target:TAnnoPlugIn=obj["target"];if(cl!=null){//allExternalClass[cpName]=cl;var extObj:IPlugInInterface=createSWFClass(cl);if(extObj!=null){target.extObj=extObj;}}}//loader.GetClass(//var target:TAnnoPlugIn=loadingQueue[loader];} }}private function createSWFClass(cl:Class):IPlugInInterface{var extObj:IPlugInInterface;try{if(cl!=null){extObj=new cl();}}catch(e:Error){return null;}return extObj;}private function onProgress(evt:ProgressEvent):void{}private function onIOError(evt:IOError):void{throw new Error("Load swf error:"+evt);}}
}
package com.tflash.Components.util
{import flash.display.DisplayObject;import flash.display.Loader;import flash.display.LoaderInfo;import flash.events.Event;import flash.events.EventDispatcher;import flash.events.IEventDispatcher;import flash.events.IOErrorEvent;import flash.events.ProgressEvent;import flash.net.URLRequest;import flash.system.ApplicationDomain;import flash.system.LoaderContext;[Event(name="complete", type="flash.events.Event")][Event(name="progress",type="flash.events.ProgressEvent")][Event(name="io_error",type="flash.events.IOErrorEvent")]public class SWFLoader extends EventDispatcher{private var loader:Loader;private var content:DisplayObject;private var loadComplete:Boolean=false;private var url:String;public function SWFLoader(url:String){this.url=url;}public function Load(url:String=null):void{if(url!=null){this.url=url;}loadComplete=false;if(loader==null){loader=new Loader();}else{loader.unloadAndStop(true);if(loader.contentLoaderInfo.hasEventListener(Event.COMPLETE)){loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoadComplete);}if(loader.contentLoaderInfo.hasEventListener(ProgressEvent.PROGRESS)){loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,onLoadIOError);}if(loader.contentLoaderInfo.hasEventListener(IOErrorEvent.IO_ERROR)){loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,onLoadIOError)}}var context:LoaderContext=new LoaderContext();context.applicationDomain=new ApplicationDomain(ApplicationDomain.currentDomain);var request:URLRequest=new URLRequest(this.url);loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoadProgress);loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,onLoadIOError);loader.load(request,context);}private function onLoadProgress(evt:ProgressEvent):void{this.dispatchEvent(evt);}private function onLoadComplete(evt:Event):void{evt.currentTarget.removeEventListener(Event.COMPLETE,onLoadComplete);evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoadIOError);evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoadIOError);content=(evt.currentTarget as LoaderInfo).content;loadComplete=true;this.dispatchEvent(new Event(Event.COMPLETE));}private function onLoadIOError(evt:IOErrorEvent):void{evt.currentTarget.removeEventListener(Event.COMPLETE,onLoadComplete);evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoadIOError);evt.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR,onLoadIOError);this.dispatchEvent(evt);}/*** 获取当前ApplicationDomain内的类定义** name类名称,必须包含完整的命名空间,如 Grave.Function.SWFLoader* info加载swf的LoadInfo,不指定则从当前域获取* return获取的类定义,如果不存在返回null*/public function GetClass(name:String):Class{if(loadComplete&&loader!=null){if(loader.contentLoaderInfo.applicationDomain.hasDefinition(name)){return loader.contentLoaderInfo.applicationDomain.getDefinition(name) as Class;}else{return null;}}return null;}public function GetContent():DisplayObject{return content;}public function GetLoader():Loader{return loader;}}
}

转载于:https://www.cnblogs.com/zhepama/p/3467153.html

as3调用外部swf里的类的方法相关推荐

  1. AS3 调用外部SWF中元件库中的元件 【转】

    参考文章: http://www.blueidea.com/tech/multimedia/2008/5842_2.asp 本文来自CSDN博客,转载请标明出处:http://blog.csdn.ne ...

  2. 使用MFC里的类的方法

    在其它工程中,如Win32 Console Application,使用MFC里的类的方法: #define _AFXDLL #include <afx.h> 加上就可以使用了.有些类可能 ...

  3. 怎么在IDEA里搜索jar包里的类的方法和配置

    IDEA搜索jar包里的文件和jar包里的文件的内容的方法 IDEA 里搜索jar包 1. 如何搜索jar包里的文件 包括搜索jar包某class文件,和搜索jar包里的配置文件等 总结:不需要下载源 ...

  4. 【python 3.6】调用另一个文件的类的方法

    文件1:test12.py 文件2:test13.py 文件1 如下: #!/usr/bin/python # -*- coding: utf-8 -*- '''''' class abcd(obje ...

  5. ant中调用外部ant任务的两种方法

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. java为什么调用接口,就可以调用到接口的实现类的方法

    这是java 三大特性之一:多态的表现 即 接口声明的变量 被赋值为该接口实现类的对象的引用 如 List list = new ArrayList( ); 这里 List 是接口, ArrayLis ...

  7. texstudio调用外部pdf查看器的配置方法

    选项-设置-命令-外部PDF查看器-打印符号-找到wps或者其他pdf查看软件的安装位置(可以在桌面的快捷方式右边查看),然后导入即可

  8. flash调用swf文件服务器,FLASH如何加载(调用)外部SWF文件

    这久遇到要在FLASH里面调用外部的SWF文件,在网上找了好久,介绍可是真多啊,用了快一天时间才学会!原来很简单,只不过走了很多弯路!现把方法介如下,希望后来人能少走些弯路! (转贴) 做FLASH站 ...

  9. java接口 调用哪个_Java通过接口调用方法的时候,怎么知道调用的是哪个实现类里的方法?...

    一个抽象接口,有很多实现类,通过接口调用某个方法的时候,怎么知道调用的是哪个实现类里的方法? 谢谢. 2014-07-02 更新 前三个回答是 可以 ,不过依然没有找到我想要的答案.比如在 Eclip ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task09. 环形链表
  2. 最强原创综述!当强化学习邂逅组合优化
  3. Ecplise SVN 配置和使用
  4. 开源jar包导入查看源码
  5. mysql重启root不能登_Mysql 5.7.28初始化使用root无法登录
  6. js如何监听元素事件是否被移除_JavaScript 监听元素是否进入/移出可视区域
  7. C语言工厂方法模式,工厂函数模式 (C语言实现)
  8. pat00-自测2. 素数对猜想 (20)
  9. Leetcode-5199 Smallest String With Swaps(交换字符串中的元素)
  10. c语言 office 二级成绩查询,【2019年9月辽宁计算机二级考试成绩查询入口】- 环球网校...
  11. OSChina 周三乱弹 —— 公司里的潜规则
  12. ORACLE按用户名重建索引
  13. Android NDK开发之 opencv manage 免安装生成opencv应用
  14. 计算机上机考试自我检查800字,【考试太差 自我反省检讨书800字】_考试成绩差自我反省检讨书范文3篇...
  15. Arch Linux 天坑
  16. C语言编程>第十七周 ⑤ 请补充fun函数,该函数的功能是:用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元。
  17. 华为p10关闭更新_华为P10怎么取消系统更新提醒
  18. P5017 NOIP2018 普及组 摆渡车
  19. ICT(计算机通信电子自动化等)专业区别和联系
  20. 《软件定义数据中心:Windows Server SDDC技术与实践》一导读

热门文章

  1. Apollo进阶课程㊱丨Apollo ROS深入介绍
  2. ajax get请求成功,成功()函数的AJAX GET请求
  3. mysql显示修改密码_MySQL修改密码
  4. php e notice,PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
  5. 同一网段计算机无法共享打印机,Win7同一个局域网内共享打印机不成功的修复方法...
  6. JAVA捕捉输入格式异常_Java学习(四).异常处理
  7. 《Python Cookbook 3rd》笔记(3.4):二、八、十六进制整数
  8. public 函数_UE4精品教程 | 渲染编程(C++篇)【第三卷:从仿函数到std::function再到虚幻4Delegate】...
  9. Dapp简单的投票小例子
  10. 英语口语-文章朗读Week10 Thursday