zoukankan      html  css  js  c++  java
  • flash AS3.0访问加载的SWF文件中的属性、方法以及类、库中的影片剪辑

    对于FLASH,我们可以把任何的可视化元件都看成某个类文件的具体实例,包括swf文件。
    我们可以把swf文件看成一个类的具体实例,而它里面拥有个个其他类的实例对象,例如:
    我们新建一个loaded.fla文件,然后我们建立一个影片剪辑元件,你可以在它的内部做一些动画处理,打开库,单击元件右建,选择“链接”打开“链接属性”,在类的输入框里我们键入“MyClass”

    这样一来我们就可以把这个元件作为一个类--MyClass。也就是说我们可以通过new来构建这个元件的具体实例并显示在舞台,如:

    var test:MyClass=new MyClass();
    addChild(test);
    

    然而ApplicationDomain类能够获得swf文件的应用程序域,通过getDefinition方法可以从指定的应用程序域获取一个公共定义。 该定义可以是一个类、一个命名空间或一个函数的定义,但是,访问被加载的swf中的属性和方法就不需要ApplicationDomain类,直接访问即可。代码如下

    package
    {
    	import flash.display.Loader;
    	import flash.display.LoaderInfo;
    	import flash.display.MovieClip;
    	import flash.display.Sprite;
    	import flash.events.Event;
    	import flash.net.URLRequest;
    	import flash.system.ApplicationDomain;
    	
    	/**
    	 *@author hypo.chen
    	 *@E-mail 645338868@qq.com
    	 *@data 2015-9-10
    	 */
    	[SWF(width="1024",height="768",frameRate="60")]
    	public class GetAppDomain extends Sprite
    	{
    		private var _lrd:Loader;
    		private var _urlR:URLRequest;
    		public function GetAppDomain()
    		{
    			init();
    		}
    		
    		private function init():void
    		{
    			_urlR = new URLRequest("loaded.swf");
    			_lrd = new Loader();
    			_lrd.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);
    			_lrd.load(_urlR);
    		}
    		
    		private function onLoaded(e:Event):void
    		{
    			//直接访问被加载的swf中的属性和方法,但是定义的属性和方法必须是public
    			e.target.content.testFun();
    			trace(e.target.content.testVar);
    			
    			//LoaderInfo对象承载载入swf文件的信息
    			var swfTarget:LoaderInfo = e.target as LoaderInfo;
    			var appDomain:ApplicationDomain = swfTarget.applicationDomain as ApplicationDomain;
    			//访问被加载的swf库中链接的类
    			var mcClass:Class = appDomain.getDefinition("MyClass") as Class;
    			
    			var mcA:MovieClip = (new mcClass()) as MovieClip;
    			var mcB:MovieClip = (new mcClass()) as MovieClip;
    			
    			this.addChild(mcA);
    			mcA.x = 100;
    			mcA.y = 100;
    			mcA.alpha = .5;
    			
    			this.addChild(mcB);
    			mcB.x = 400;
    			mcB.y = 100;
    			//访问被加载的swf库中的文档类
    			var _test:Class = appDomain.getDefinition("Test") as Class;
    			
    		}
    	}
    }
    

    loaded.fla文档类代码如下:

    package 
    {
    	import flash.display.MovieClip;
    
    	public class Test extends MovieClip
    	{
    		public var testVar:String = "testVar";
    		public function Test ()
    		{
    			// constructor code
    			trace("test")
    		}
    		
    		public function testFun():void
    		{
    			trace("testFun");
    		}
    
    	}
    
    }
  • 相关阅读:
    2-4 Vue中的属性绑定和双向数据绑定
    MySQL索引失效的几种情况
    MySQL索引失效的几种情况
    Linux实现MYSQl数据库的定时备份
    Linux实现MYSQl数据库的定时备份
    你还在 Select * 吗?
    你还在 Select * 吗?
    世界顶级的程序员们告诉你:这些书都是你应该读的
    世界顶级的程序员们告诉你:这些书都是你应该读的
    真正努力和不努力的程序员,发朋友圈究竟有什么不一样?
  • 原文地址:https://www.cnblogs.com/chen-mo/p/4798243.html
Copyright © 2011-2022 走看看