Flash AS3教程:ClassLoader类-Flash actionscript

2016-03-18 16:01 5 1 收藏

下面,图老师小编带您去了解一下Flash AS3教程:ClassLoader类-Flash actionscript,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - FLASH 】

前面介绍了Flash AS3教程:Dot类,接着介绍ClassLoader类!

主要用途

1、在用flash做项目的时候,把一些元件,通过设置链接类,然后使用这个类,通过getClass方法即可把这个素材拿下来


图1(详见例1)

2、将许多许多的类分库到不同的swf中,然后通过调用swf,达到调用类库的功能,然后通过getClass来获取类(详见例2)

index.base.net.ClassLoader类讲解:
加载swf文件,并且通过调用getClass获取类,也可以获取命名空间或者函数的定义

构造函数
public function ClassLoader(obj:Object = null,lc:LoaderContext = null)
参数1可以是字符串,可以是ByteArray,如果为前者则采用load方法,后者采用loadBytes方法
参数2是创建带有指定 LoaderContext 对象的ClassLoader实例,LoaderContext 可以设置是否加载跨域文件,应用程序域等,详见官方LoaderContext类讲解!

load 方法
public function load(_url:String,lc:LoaderContext = null):void
加载文件
参数1是加载地址,参数2见构造函数

loadBytes 方法
public function loadBytes(bytes:ByteArray,lc:LoaderContext = null):void
加载字节文件
参数1是字节数据,参数2见构造函数

getClass 方法
public function getClass(className:String):Object
获取一个公共定义,可以是类,也可以是命名空间或者函数定义
参数1是获取class的完整包加类名,比如我们的这个类完整定义名称是 index.base.net.ClassLoader
详见例子

hasClass 方法
public function hasClass(className:String):Boolean
返回是否含有www.Tulaoshi.com该公共定义
参数1见getClass方法

clear 方法
public function clear():void
清空

url 属性
public var url:String
获取url属性

loader 属性
public var loader:Loader
获取loader属性

例子1:


图2

这是一个虚拟人物形象的动作包,其中包含了8种不同的动作
在使用ClassLoader加载这个swf的动作包后,即可使用getClass来调用这些素材,而且可以重复的new这些元件,来达到多次重复使用

import index.base.net.ClassLoader;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

var cl:ClassLoader = new ClassLoader;
cl.load("main.swf");

cl.addEventListener(Event.COMPLETE,fun);

function fun(e:Event){
  var tmp = cl.getClass("drag");
  addChild(new tmp); 
}

例子2:
将设我有一个类库,有这么三个类

然后把它编译成swf

我们另外建一个文件,来加载这个所谓的类库

import index.base.net.ClassLoader;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

var cl:ClassLoader = new ClassLoader;
cl.load("main.swf");

cl.addEventListener(Event.COMPLETE,fun);

function fun(e:Event){
  var tmp1 = cl.getClass("index.base.net.ByteLoader");
  trace(tmp1)
 
  var tmp2 = cl.getClass("index.base.net.ClassLoader");
  trace(tmp2)
 
  var tmp3 = cl.getClass("index.base.geom.Dot");
  trace(tmp3)
}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/flash/)

/**
 * trace的结果:
 * [class ByteLoader]
 * [class ClassLoader]
 * [class Dot]
 */

我们的目的就达到了!

接下来是源代码!

package index.base.net{
 
  import flash.display.Loader;
  import flash.net.URLRequest;
  import flash.utils.ByteArray;
  import flash.events.Event;
  import flash.events.ProgressEvent;
  import flash.events.EventDispatcher;
  import flash.system.LoaderContext;
 
  public class ClassLoader extends EventDispatcher{
   
    public var url:String;
    public var loader:Loader;
   
    //构造函数
    public function ClassLoader(obj:Object = null,lc:LoaderContext = null) {
      if(obj != null){
        if(obj is ByteArray){
          loadBytes(obj as ByteArray,lc);
        }else if(obj is String){
          load(obj as String,lc);
        }else{
          throw new Error("参数错误,构造函数第一参数只接受ByteArray或String");
        }
      }
    }
   
    //加载
    public function load(_url:String,lc:LoaderContext = null):void{
      url = _url;
      loader = new Loader;
      loader.load(new URLRequest(url),lc);
      addEvent();
    }
   
    //加载字节
    public function loadBytes(bytes:ByteArray,lc:LoaderContext = null):void{
      loader = new Loader;
      loader.loadBytes(bytes,lc);
      addEvent();
    }
   
    //开始侦听
    private function addEvent():void{
      loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progressFun);
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeFun);
    }
   
    //结束侦听
    private function delEvent():void{
      loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,progressFun);
      loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,completeFun);
    }
   
    //加载成功,发布成功事件
    private function completeFun(e:Event):void {
      delEvent();
      dispatchEvent(e);
    }
   
    //加载过程
    private function progressFun(e:ProgressEvent):void{
      dispatchEvent(e);
    }
   
    //获取定义
    public function getClass(className:String):Object {
      return loader.contentLoaderInfo.applicationDomain.getDefinition(className);
    }
   
    //是否含有该定义
    public function hasClass(className:String):Boolean {
      return loader.contentLoaderInfo.applicationDomain.hasDefinition(className);
    }
   
    //清除
    public function clear():void{
      loader.unload();
      loader = null;
    }
  }
}

来源:https://www.tulaoshi.com/n/20160318/1888831.html

延伸阅读
标签: FLASH flash教程
创建文档类(Document class) 现在我们对类已经了一定的了解,接下来,看看如果真正地使用它。有时候我常说基于 AS 3的 SWF 是多么的重要,这是因为 AS 3 引入了一个全新的概念,文档类(document class)。 一个文档类就是一个继承自 Sprite 或 MovieClip 的类,并作为 SWF 的主类。读取 SWF时,这个文档类的构造函数会被自动调用。它就成为...
AS3.0 含有多个类的AS3类文件 标准的AS3类文件是以".as"为结尾的纯文本文件。一个类文件可以包含一个或多个类定义,甚至可以直接写入一次性执行的语句。AS3中,在package花括号外,可以定义一个或多个Class,不可与文件同名。这些花括号外的类,称为当前类文件的包外类。只有当前类文件中的成员可以访问。 包外类的产生,每个.as...
标签: FLASH flash教程
看效果: 那天在网上看到一个效果,感觉不错,今天晚上没事自己也模仿了一下。做得不好,希望大家不要见笑! ////// //椭圆短半轴 var H = 80; //椭圆长半轴 var W = 200; //定义弧度的增量n var n = 0; //定义椭圆的中心坐标 var cenX = Stage.width/2; var cenY...
标签: flash教程
 AS3.0 含有多个类的AS3类文件 标准的AS3类文件是以".as"为结尾的纯文本文件。一个类文件可以包含一个或多个类定义,甚至可以直接写入一次性执行的语句。AS3中,在package花括号外,可以定义一个或多个Class,不可与文件同名。这些花括号外的类,称为当前类文件的包外类。只有当前类文件中的成员可以访问。 包外类的产生...
本例为Flash AS3.0菜鸟学飞系列教程,在上一讲中我们学习了含有多个类的AS3类文件的写法,在这一讲中我们来学习帧循环的运用,希望能给初学Flash AS编程的朋友带来帮助~~ 学习AS3菜鸟起飞吧之帧循环 多帧循环 Flash中的帧在默认情况下是循环执行的,租用gotoAndPlay()函数可以实现简单的帧循环,而实现代码的重复执行。 gotoAndPlay()...

经验教程

150

收藏

49
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部