as3调用外部swf里的类的方法

  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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇编语言与汇编器

以下内容源于网络资源的学习与整理&#xff0c;如有其侵权请告知删除。 一、汇编语言概述 机器指令集&#xff08;由众多机器码指令构成的集合&#xff09;是由CPU的设计者制定的&#xff0c;CPU的内部电路设计就是为了实现这些指令集的功能。可以这样理解&#xff0c;机器指令…

chmod常见用法

1 功能 改变文件的访问权限。主要是读、写、执行权限。 2 说明 2.1 权限种类 r  读 w  写 x  执行(或目录的访问权) X  只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x属性 s  同时设定用户或组ID t  粘滞位&#xff08;删除或移动&#xff09; 2.2…

网络套接字socket的简介

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 总结 socket的中文翻译是“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种方式。 套接字的典型应用就是web服务器和浏览器。 在Unix/Linux中&#xff0c;网络连接也是一…

VB6 无法加载ieframe.dll,导致不能使用 浏览器控件--(转载)

VB6编程中&#xff0c;如果使用了WebBrowser控件&#xff0c;保存关闭工程后再次打开时会出现错误提示&#xff1a;文件未找到: c:\windows\sytem32\ieframe.dll\1--继续加载工程吗&#xff1f;然后你就发现原先的WebBrowser控件变成一个PictureBox了&#xff0c;无法正常使用。…

IP、MAC和端口号

以下内容源于C语言中文网资料的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 在茫茫的互联网海洋中&#xff0c;要找到一台计算机非常不容易&#xff0c;有三个要素必须具备&#xff0c;它们分别是 IP 地址、MAC 地址和端口号。 IP地址 IP地址是 Internet Pr…

Java保留小数点一位的方法

float result (float) (Math.round (result * 10)) / 10;要是保留两位&#xff1a;10 --> 100, 以此类推.转载于:https://blog.51cto.com/5934497/1588690

UML概述

UML视频一直在看&#xff0c;但是总觉得没有什么思路&#xff0c;知识都是零散的、片面的。最后复习阶段老师重新理了一下思路&#xff0c;我才觉得有点清晰了。所以&#xff0c;又回头把UML概述部分总结了一下。 感慨一句&#xff1a;思维导图真的要勤画&#xff0c;画图也是在…

TCP/IP模型简介(OSI模型的简化版)

以下内容源于C语言中文网的学习与整理&#xff0c;如有侵权请告知删除。 一、TCP/IP模型 1、模型的概念 OSI 是 Open System Interconnection 的缩写&#xff0c;译为“开放式系统互联”。OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络…

Atitit.web预览播放视频的总结

Atitit.web预览播放视频的总结 1. 浏览器类型的兼容性(chrome,ff,ie) 1 2. 操作系统的兼容性 1 3. 视频格式的内部视频格式跟播放器插件的兼容性.. 2 4. 指定播放器 embed 模式 2 1. 浏览器类型的兼容性(chrome,ff,ie) <% if( mediaUrl.endsWith(".avi") || …

Android去掉listView,gridView等系统自带阴影

当我们使用listView的时候&#xff0c;拉到顶&#xff0c;或是拉到底部的时候&#xff0c;我们会发现有系统自带的阴影效果出现&#xff0c;不同手机出现的颜色可能还会不一样。 在以前我始终都有注意到此问题&#xff0c;一直以为是系统自带的&#xff0c;不能去掉。也没有想过…

图解TCP数据的传输(建立连接、数据传输、断开连接)

以下内容源于C语言中文网的学习与整理&#xff0c;非原创&#xff0c;仅作学习之用&#xff0c;如有侵权请告知删除。 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的通信协议&#xff0c;数据在传…

自定义Button,复写里面的onKeyDown,不起作用

李刚的Android疯狂讲义真是“疯狂”&#xff0c;浪费了3天时间&#xff0c;到底是他的代码有问题&#xff0c;还是怎么的不得而知。 问题描述&#xff1a;他的书里面第3.3基于回调事件处理Propagation的例程。是为了演示基于回调事件传播的例程序&#xff0c;源代码如下&#x…

JavaScript跨域总结与解决办法

什么是跨域1、document.domainiframe的设置2、动态创建script3、利用iframe和location.hash4、window.name实现的跨域数据传输5、使用HTML5 postMessage6、利用flash本文来自网络&#xff08;http://f2e.me/200904/cross-scripting/&#xff0c;该网址已不能访问&#xff09;&a…

与socket网络编程有关的函数

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 基于TCP通信的服务模式 服务端 socket函数&#xff0c;获取网络连接的文件描述符 bind函数&#xff0c;将服务器的端口、ip地址与socket函数创建的文件描述符绑定 listen函数&#xff0c;监听服务器的当前端…

1609: [Usaco2008 Feb]Eating Together麻烦的聚餐

1609: [Usaco2008 Feb]Eating Together麻烦的聚餐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1010 Solved: 606 [Submit][Status] Description 为了避免餐厅过分拥挤&#xff0c;FJ要求奶牛们分3批就餐。每天晚饭前&#xff0c;奶牛们都会在餐厅前排队入内&#xff0c…

转载Linq中GroupBy方法的使用总结

Group在SQL经常使用&#xff0c;通常是对一个字段或者多个字段分组&#xff0c;求其总和&#xff0c;均值等。 Linq中的Groupby方法也有这种功能。具体实现看代码&#xff1a; 假设有如下的一个数据集&#xff1a; public class StudentScore { public int ID { se…

例程:Linux下的socket演示程序1

server.cpp 是服务器端代码&#xff0c;client.cpp 是客户端代码。 要实现的功能是&#xff1a;客户端从服务器读取一个字符串并打印出来。 服务器端代码 server.cpp&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include &…

在Atom中运行脚本

2019独角兽企业重金招聘Python工程师标准>>> 现在可以在atom官网&#xff08;https://atom.io/&#xff09;找到deb包。 插件script可以让atom运行脚本&#xff0c;具体请见&#xff1a;https://atom.io/packages/script。 下面大致讲一下如何使用。 安装atom后&…

例程:socket编程实现文件传输功能

程序要实现的功能&#xff1a;client 从 server 下载一个文件并保存到本地。 编写这个程序需要注意两个问题&#xff1a; &#xff08;1&#xff09;文件大小不确定 有可能比缓冲区大很多&#xff0c;调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇…

js中的this

在面向对象编程语言中&#xff0c;对于this关键字我们是非常熟悉的。比如C、C#和Java等都提供了这个关键字&#xff0c;虽然在开始学习的时候觉得比较难&#xff0c;但只要理解了&#xff0c;用起来是非常方便和意义确定的。JavaScript也提供了这个this关键字&#xff0c;不过用…