动态加载swf并进行交互

Flex加载swf的几种方法 Flex加载swf的几种方法 Flex中通常会使用一些动画,这些需要借助flash的时间轴才可以创建。前面讲过两种方式: 1. 由Flash编译,由Flex写AS,通过库中元件的链接类调用。查看 2. 由Flash导出SWC,由Flex导入SWC。查看 这篇文章讲述使用外部swf的方式。 加载方式有很多,这里介绍两种,一种Embed,一种是Loader。 1 Embed 阅读详情

综合http://blog.youkuaiyun.com/liyong199012/article/details/6085545

http://blog.sina.com.cn/s/blog_7e2d7da8010130gt.html

http://blog.youkuaiyun.com/hu36978/article/details/4718840

下面转自     http://bbs.9ria.com/thread-133293-1-1.html


总结下as3反射的相关用法,主要是四个函数:
flash.system.ApplicationDomain.getDefinition(linkName:String):Class;     //flashcs元件库中的某个元件链接名称
flash.utils.getDefinitionByName(name:String):Object;    //返回name参数指定的类的类对象引用
flash.utils.getQualifiedClassName(value:*):String;    //返回对象的完全限定类名
flash.utils.getQualifiedSuperClassNameTest;    // 返回value参数指定的对象的基类的完全限定类名。

在as3.0中,你会发现在flash.utils包中有一系列函数提供了反射的功能。主要包含以下功能:
* 确定对象的类
* 确定接口声明的常数和方法
* 获取类的成员、构造函数、方法、父类信息
* 在运行时根据类名创建类的实例
* 在运行时根据成员名称来调用对象成员
* 在运行时根据方法名称来调用对象方法

看代码:
Main.as类

  1. package
  2. {
  3. import flash.display.MovieClip;
  4. import flash.display.Shape;
  5. import flash.display.Sprite;
  6. import flash.system.ApplicationDomain;
  7. import flash.utils.getDefinitionByName;
  8. import flash.utils.getQualifiedClassName;
  9. import flash.utils.getQualifiedSuperclassName;

  10. import test.IPerson;
  11. import test.PersonImplA;

  12. /**
  13. * as3反射实例
  14. * @author xuechong
  15. * @language as3 fp9
  16. * @date 2012.06.03
  17. * @QQ群交流 241294271
  18. * */
  19. public class Main extends Sprite
  20. {
  21. //private var _personAersonImplA;

  22. public function Main()
  23. {
  24. //getDefinitionFunc();
  25. getDefinitionByNameFunc();
  26. //getQualifiedClassNameFunc();
  27. //getQualifiedSuperClassNameFunc();
  28. }

  29. /**
  30. * flash.system.ApplicationDomain类中的一个函数
  31. * aa字符串就是flashcs元件库中的链接名称(也就是元件绑定的类的名字)
  32. */
  33. public function getDefinitionFunc():void
  34. {
  35. var app:ApplicationDomain = ApplicationDomain.currentDomain;
  36. try
  37. {
  38. var cls:Class = app.getDefinition("aa") as Class;
  39. var mc:MovieClip = new cls() as MovieClip;
  40. mc.y = 300;
  41. this.addChild(mc);
  42. }
  43. catch(error:ReferenceError)
  44. {
  45. trace("反射错误", error.message);
  46. }
  47. }

  48. /**
  49. * flash.utils.getDefinitionByName(name:String):Object
  50. * 返回name参数指定的类的类对象引用
  51. * 注:如果是自定义类则要先定义上此类的引用
  52. * */
  53. public function getDefinitionByNameFunc():void
  54. {
  55. var ClassReference:Class = getDefinitionByName("test.PersonImplA") as Class; //[class PersonImplA]
  56. var obj:IPerson = new ClassReference() as IPerson; //[object PersonImplA]
  57. obj.sayHello();
  58. }

  59. /**
  60. * flash.utils.getQualifiedClassName(value:*):String
  61. * 返回对象的完全限定类名
  62. * */
  63. private function getQualifiedClassNameFunc():void
  64. {
  65. var sh:Shape = new Shape();
  66. trace(getQualifiedClassName(sh)); //flash.display::Shape

  67. var aersonImplA = new PersonImplA();
  68. trace(getQualifiedClassName(a)); //test:ersonImplA

  69. trace(getQualifiedClassName(this)); //Main
  70. }

  71. /**
  72. * flash.utils.getQualifiedSuperClassNameTest
  73. * 返回value参数指定的对象的基类的完全限定类名。
  74. * 即返回继承关系上的父类
  75. * */
  76. private function getQualifiedSuperClassNameFunc():void
  77. {
  78. var sh:Shape = new Shape();
  79. trace(getQualifiedSuperclassName(sh)); //flash.display:isplayObject

  80. var aersonImplA = new PersonImplA();
  81. trace(getQualifiedSuperclassName(a)); //flash.display::Sprite

  82. trace(getQualifiedSuperclassName(this)); //flash.display::Sprite
  83. }

  84. }
  85. }
复制代码


IPerson.as接口
  1. package test
  2. {
  3. public interface IPerson
  4. {
  5. function sayHello():void; 
  6. }
  7. }
复制代码


PersonImplA.as类

  1. package test
  2. {
  3. import flash.display.Sprite;

  4. public class PersonImplA extends Sprite implements IPerson
  5. {
  6. public function PersonImplA()
  7. {

  8. }

  9. public function sayHello():void
  10. { 
  11. trace("This is PersonImplA"); 
  12. }

  13. }
  14. }
复制代码

PersonImplB.as类
  1. package test
  2. {
  3. import flash.display.Sprite;

  4. public class PersonImplB extends Sprite implements IPerson
  5. {
  6. public function PersonImplB()
  7. {

  8. }

  9. public function sayHello():void
  10. { 
  11. trace("This is PersonImplB"); 
  12. }

  13. } 
  14. }
复制代码


下面是总结上面几个网址去动态加载swf进行交互的demo


package {
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;


public class LoadSwfExample extends Sprite {
private var loader:Loader;
private var completeLoaded:Boolean;
private var urlRequest:URLRequest;
private var getSwf:MovieClip;//对swf对象的引用变量
public function LoadSwfExample() {
loader= new Loader();
urlRequest=new URLRequest("Loaded.swf");// 该文档与Loaded.swf在一个目录

/**
* 第二种方式才需要加上
* **/
var context : LoaderContext = new LoaderContext(true, ApplicationDomain.currentDomain);
/* 加载到同域(共享库) */
context.applicationDomain = ApplicationDomain.currentDomain;
//context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);

//下面我只注册个complete事件,对IOErrorEvent的事件在实际操作时也要注册,以便检测错误
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
loader.load(urlRequest);
stage.addEventListener(MouseEvent.MOUSE_DOWN,onDown);//主要是改变加载进来的swf的背景颜色
}
private function onComplete(e:Event=null):void {

// 第一种方式下面这句很关键, 将加载进来的Loaded.swf强制转化为MovieClip类型
getSwf=MovieClip(e.currentTarget.content);

//第二种方式
var runtimeClassRef:Class = getClass("Loaded");
getSwf = new runtimeClassRef() as MovieClip;

//把主swf传给动态加载的swf
getSwf.getParent(this);
//然后可以将其当做影片剪辑来使用 也可以操作swf里的全局变量
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onComplete);
getSwf.x=100;
getSwf.y=200;
addChild(getSwf);
completeLoaded=true;

}
private function onDown(e:MouseEvent):void {

if (completeLoaded) {
getSwf._text+=1;//这里操作了_text全局变量
//调用Loaded.swf里的drawbackground()方法
getSwf.drawBackground(Math.random()*0xFFFFFF);//随机颜色值

} else {
trace("正在加载,请等待...");
}
}

/**
*该方法得是public,不然动态加载的swf调用不了该方法 
**/
public function moveSWF():void{
getSwf.x+=10;
getSwf.y+=10;
}

//使用反射的方式
private function getClass(className:String):Class
{
//return loader.contentLoaderInfo.applicationDomain.getDefinition(className)  as  Class;
try
{
return loader.contentLoaderInfo.applicationDomain.getDefinition(className)  as  Class;
} catch (p_e : ReferenceError)
{
trace("定义 " + className + " 不存在");
return null;
}
return null;
}

}
}


Loaded.swf的代码如下


package {

//该文档的大小是400*200的
// 为了使该swf被夹在后,其他swf能够调用相关变量 则,则该变量必须设为public的公共属性
//强制转换失败的原因
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;


public class Loaded extends MovieClip {
public var _text:Number;//文本内容, 其在加载后的swf里要用的 故将其设为public 
private var shape:Shape;
public var _textField:TextField;
private var __parent:Object;



public function Loaded() {
_text=0;
shape=new Shape()  ;//shape放在外面
drawTextField();
drawBackground(0x6699FF);
addChild(shape);//end draw 
addChild(_textField);

}

private function drawTextField():void {
_textField=new TextField  ;
_textField.border=true;
_textField.background=true;
_textField.borderColor=0x000000;
_textField.backgroundColor=0xFFFFFF;
_textField.width=300;
_textField.height=100;
_textField.defaultTextFormat=new TextFormat("Arial",16,0x000000);
_textField.restrict="0-9";
_textField.text=String(_text);
_textField.x=50;
_textField.y=50;
_textField.addEventListener(MouseEvent.CLICK,function():void{
trace(__parent);
if(__parent){
__parent.moveSWF();
}
});
}
//创建背景矩形 在其他swf可以改变背景颜色, 故将其设为public 
public function drawBackground(color:uint):void {
_textField.text=String(_text);
shape.graphics.clear();
shape.graphics.lineStyle(2,0);//定义矩形边宽
//画矩形
shape.graphics.beginFill(color);
shape.graphics.drawRect(2,2,398,198);
shape.graphics.endFill();
}

public function getParent(_parent:Object) : void {
__parent=_parent;//通过__parent 就可以使用文档类里的方法和属性了。
}

public function setTextFun(msg:String):void{
trace("msg =" + msg);
}

}
}




深入探索AS3中的SWF类库调用 事件监听机制是基于观察者模式,允许对象注册为事件监听器,并在特定的事件发生时,接收通知。在Loader类的上下文中,这意味着你可以监听到一系列的事件,如加载开始、加载进度、加载完成等。这些事件被触发时,相关联的事件处理函数会被调用。 阅读详情

相关推荐

Python SWFTools

SWFTools is a collection of utilities for working with Adobe Flash files (SWF files). The tool collection includes programs for reading SWF files, combining them, and creating them from other content (like images, sound files, videos or sourcecode). SWFTools is released under the GPL. The current collection is comprised of the programs detailed below: • PDF2SWF A PDF to SWF Converter. Generates one frame per page. Enables you to have fully formatted text, including tables, formulas, graphics etc. inside your Flash Movie. It's based on the xpdf PDF parser from Derek B. Noonburg. • SWFCombine A multi-function tool for inserting SWFs into Wrapper SWFs, contatenating SWFs, stacking SWFs or for basic parameter manipulation (e.g. changing size). • SWFStrings Scans SWFs for text data. • SWFDump Prints out various informations about SWFs, like contained images/fonts/sounds, disassembly of contained code as well as cross-reference and bounding box data. • JPEG2SWF Takes one or more JPEG pictures and generates a SWF slideshow from them. Supports motion estimation compression (h.263) for better compression of video sequences. • PNG2SWF Like JPEG2SWF, only for PNGs. • GIF2SWF Converts GIFs to SWF. Also able to handle animated gifs. • WAV2SWF Converts WAV audio files to SWFs, using the L.A.M.E. MP3 encoder library. • AVI2SWF Converts AVI animation files to SWF. It supports Flash MX H.263 compression. Some examples can be found at examples.html. (Notice: this tool is not included anymore in the latest version, as ffmpeg or mencoder do a better job nowadays) • Font2SWF Converts font files (TTF, Type1) to SWF. • SWFBBox Allows to read out, optimize and readjust SWF bounding boxes. • SWFC A tool for creating SWF files from simple script files. Includes support for both ActionScript 2.0 as well as ActionScript 3.0. • SWFExtract Allows to extract Movieclips, Sounds, Images etc. from SWF files. • AS3Compile A standalone ActionScript 3.0 compiler. Mostly compatible with Flex. SWFTools

js加载swf文件

普通方式加载swf文件可以不引用swfobject.js [code="html"] SWFObject 2 static publishing example page swfobject.registerObject("myId", "9.0.0", "expressInstall.swf"); ...

j416066989的博客 1266

可随时控制的SWF播放器

一款swf播放器,对swf格式的文件,尤其是视频播放可以进行精确控制播放、暂停、快进等,swf大多是矢量格式,播放起来更是无损,新的福利

Fanvas, 把swf文件转html5 canvas js软件工具程序

Fanvas, 把swf文件转html5 canvas js软件工具程序 什么是Fanvas? Fanvas是一个把swf转为html5 canvas动画的系统,由两部分组成:Actionscript实现的解析器、js运行库。 Flash做动画是最成熟最高效的方式,但由于终端基本不支持Flash播放,这给终端的动画制作带来了不少麻烦。 Fanvas是Flash和Canvas的完美结合,可以...

GEO,SEO,AI优化,AI搜索优化,生成式引擎优化 5030

播布客波罗蜜多老师-Python之旅

Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。 Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议 。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。

使用LocalConnection进行swf之间的数据交互(附helloWorldDemo)

NULL 博文链接:https://globle.iteye.com/blog/748144

【亲测免费】 PYSWF项目下载及安装教程

PYSWF项目下载及安装教程 1. 项目介绍 PYSWF是一个用于读取和写入SWF文件的Python库。它是Claus Wahlers的SWF解析器的Python移植版本。PYSWF提供了对SWF文件的解析和处理功能,支持基本的SWF文件操作和SVG导出。 2. 项目下载位置 PYSWF项目的源代码托管在GitHub上。你可以通过以下命令克隆项目到本地: git clone https://git...

gitblog_01264的博客 1047

Rsoft仿真实战:长周期光纤光栅参数优化与模式耦合分析

本文详细介绍了使用Rsoft软件进行长周期光纤光栅(LPFG)参数优化与模式耦合分析的实战方法。通过Rsoft仿真,可以高效优化光栅周期、包层厚度等关键参数,深入分析纤芯模与包层模的耦合特性,为光纤通信和传感应用提供可靠的设计依据。

h0i1j2k3l的博客 1115

PySWF 开源项目教程

PySWF 开源项目教程 项目介绍 PySWF 是一个用于解析和处理 SWF (Shockwave Flash) 文件的 Python 库。SWF 文件是 Adobe Flash 技术中使用的文件格式,用于存储矢量图形、音频、视频和动画。PySWF 库提供了丰富的功能,允许开发者读取和操作 SWF 文件的内容,适用于多种应用场景,如游戏开发、多媒体处理和数据分析等。 项目快速启动 安装 PySWF...

gitblog_00257的博客 726

别再只盯着meta包了!盘点R语言中7个元分析工具包的特色与适用场景

本文深入评测了R语言中7个主流元分析工具包(meta、metafor、netmeta、mada、mvmeta、metasens、rmeta)的核心功能与适用场景,帮助研究者根据具体需求精准选型。通过对比表格和实际代码示例,详细解析了各工具包在传统两两比较、网络Meta分析、诊断准确性研究等不同场景下的差异化优势,并提供了性能对比和组合使用建议。

weixin_30736301的博客 296

【实战案例】IBM V3500存储控制器故障诊断与更换全流程解析

本文详细解析了IBM Storwize V3500存储控制器发生故障后的完整处理流程。通过还原真实故障现场,介绍了如何利用服务助手精准定位缓存模块损坏的根源,并逐步指导完成控制器备件准备、核心部件移植更换、系统上线同步及全面功能验证的全过程,为存储运维人员提供了一份实用的实战指南。

weixin_29269441的博客 547

加载swf并获取swf中的元件

import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; import flash.system.ApplicationDomain; import flash.display.MovieClip; var loader:Loader = new Loader();

wyr0924的专栏 1088

用STM32的SPI模式2搞定SSI绝对值编码器通信(附完整代码与避坑点)

本文详细解析了如何使用STM32的SPI模式2实现SSI绝对值编码器通信,包括硬件设计、SPI配置、数据处理算法及稳定性优化技巧。通过完整的代码示例和避坑指南,帮助工程师解决时序匹配、数据解析等常见问题,提升工业自动化系统中的编码器通信可靠性。

weixin_27252001的博客 264

关于flex MDI的应用

首先,到http://code.google.com/p/flexmdi/下载swc包,放在下面libs下, 如果是flex web项目,放在flex_libs下 /*==========静态加载mdi=================**/ view plaincopy to clipboardprint?       flexmdi:MDICanvas id="

俊哥 875

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

AD9361 官方例程

文章目录一、官方资料1.1 介绍1.2 下载 和 使用1.3 相关资料二、步骤2.1 在Vivado中构建HDL2.2 在SDK中构建No- OS总结 一、官方资料 1.1 介绍 HDL参考设计介绍:AD9361 HDL Reference Designs 无操作系统介绍:AD9361 No-OS Software 1.2 下载 和 使用 HDL下载:Download HDL 在Vivado中构建HDL:Building HDL No-OS下载:Download No-OS 1.3 相关资料 AD

weixin_44630490的博客 3万+

使用loader加载swf

<br />使用loader加载swf的时候会遇到很多的问题,但是采用下面的方法进行加载去没有问题,首先是使用URLLoader加载swf文件成为ByteArray数据,然后再使用Loader加载ByteArray获得swf文件,下面的是测试的代码:<br /><br /><br />package<br /> {<br />     import flash.display.Loader;<br />     import flash.display.MovieClip;<br />     im

wkyb608的专栏 2258

华为od 面试八股文_C语言_01_含答案

华为od 面试八股文_C语言_01_含答案

MISAYAONE的博客 3225

Unity3D的uniSWF插件动态加载SWF UI资源

然后我们就可以在程序中编写了,这个程序需要拖放的对象当然也是相机对象,要切记!中首先要选择摄像机,给摄像机添加。对按钮父容器进行监听,通过事件的。要想获得对象的子对象,可以采用。当然要是想添加点击事件的话就和。菜单或者像导航一样的菜单,在。不触发事件,很关键,不然下文。材质有区别需要找的对象放在。编程类似,只不过环境要在。中一样了,可以直接添加。不然程序就会报错了。

小小姑娘 719

【回眸】Tessy集成测试软件使用指南(一)新手使用篇

这个专栏的文章前4篇都在记录如何使用Tessy进行单元测试,集成测试需要有一定单元测试基础,且做集成测试之前,需要做好单元测试,否则将会大幅增加软件单元代码纠错的代价。集成测试所花费的时间通常远远超过单元测试。如果直接从单元测试到系统测试,结果往往是不理想的。集成测试可以检测由于单元相互交互而导致的错误,通常由一组专业的测试人员执行。

啤酒鸭的物联网开发记录博客 5278

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Flex动态加载swc和swf中的class

Flex动态加载swc和swf中的class

qq_44952688的博客 194

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Unity3D的uniSWF插件动态加载SWF UI资源:赋能高效资源整合

Unity3D的uniSWF插件动态加载SWF UI资源:赋能高效资源整合 【下载地址】Unity3D的uniSWF插件动态加载SWFUI资源1 Unity3D的uniSWF插件为开发者提供了动态加载SWF UI资源的强大功能,助力高效整合SWF格式资源到Unity3D项目中。通过该插件,开发者能够轻松管理和加载SWF文...

gitblog_06770的博客 1090

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Unity3D的uniSWF插件动态加载SWF UI资源1

Unity3D的uniSWF插件动态加载SWF UI资源1 【下载地址】Unity3D的uniSWF插件动态加载SWFUI资源1 Unity3D的uniSWF插件为开发者提供了动态加载SWF UI资源的强大功能,助力高效整合SWF格式资源到Unity3D项目中。通过该插件,开发者能够轻松管理和加载SWF文件,显著提升项目...

gitblog_06799的博客 453

flex动态生成矢量swf字体--java动态生成swf文件

前言 相信很多在线设计的前端WEB应用会用到字体作为素材的案例,丰富多样的字体一般是部署在服务器端让用户去选择,而且能动态部署,使用客户端字体显然是不可取的; 现状 然而中文字体动不动就几个M,做过flash的同学应该知道嵌入字体是怎么回事,假如嵌入字体会使得swf整个体积变大,而flex目前容易做到的是整个字体文件编译成swf格式来动态加载。假如需要根据用户输入的文字动态的加载该如何做呢? 最简单的方案是后台根据字体生产位图,这不能满足我的要求,1,位图拉伸

3616
上一篇: 爸妈妹的生日
下一篇: AS3中Matrix类
我是一纸巾
博客等级 码龄12年 14粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值