as3.0 Document Class特色带来了什么?

来源:互联网 发布:mac 代理服务器 编辑:程序博客网 时间:2024/06/04 13:53

Document Class,中文直译为“文档类”。顾名思义,就是和文档绑在一起的类。
文档是啥?就是要和这个类绑在一起的Fla文件。

什么用处
这个玩意儿根本目的就是想把AS代码和Flash设计完全剥离。
从此,Fla里面只管设计,逻辑代码全部由外部的类来包办。

对于设计者和新手,黑羽可以打个比方,就好比三步走:

1.把Fla里面所有代码集中到第一帧,
2.再把第一帧里的代码拷贝到外部的一个as文件里。
3.再按照AS3.0的形式,把这些代码放到这个类的构造函数里去。再根据这些个代码抽出一些类的属性和方法就OK了。

唔,这个比喻有很多小毛病。但比较直观,比较好理解,一步步来。
等你明白有哪些小毛病了,你已经不需要这个破比喻了。

对于程序开发者(比如c#)
Document Class就好比一个Entry,它的构造函数就相当于一个main函数。

教程相关例子下载点击下载

先来一个例子:

上次建立的KingdaMC.fla和KingdaMC.as还在吧?
删了?重来一遍吧,本次要用到fla里面的加好链接类的元件,以及相关的KingdaMC类文件。

我们干两件事:

1.新建一个Document Class类。
2.用上之前的那个Kingda.fla,绑定Document Class

1.新建一个as文件,命名为KingdaMCDocumentClass,记得要和fla在同一目录下:
输入如下代码:

//因为在统一目录下,所以package后面没有路径
package {
   import flash.display.MovieClip;
  
   public class KingdaMCDocumentClass extends MovieClip {
      private var tempMC:KingdaMC; //临时变量,持有当时创建的KingdaMC的引用。
      private var MAX_MCS:int = 10;  //最多创建的KingdaMC数目
     
     //构造函数,和类同名,在AS3.0中必须为public。不能用private,protected或者自定义的namespace
      public function KingdaMCDocumentClass() {
         var i:int;  //新的数据类型int,只要是整数,就请用int。效率快过Number。
         for (i = 0; i < MAX_MCS; i++) {
            tempMC = new KingdaMC ();
           
           //以下两行定义创建的KingdaMC形状大小随机
            tempMC.scaleX = Math.random();
            tempMC.scaleY = tempMC.scaleX;
           //以下两行定义创建的KingdaMC位置在舞台上随机。
            tempMC.x = Math.round(Math.random() * (this.stage.stageWidth - tempMC.width));
            tempMC.y = Math.round(Math.random() * (this.stage.stageHeight - tempMC.height));
            addChild(tempMC);
         } 
      }
   }
}

它要干的事很简单,就是用我们之前的KingdaMC类在舞台上创建十个KingdaMC实例,大小随机,位置随机。

2.用上之前的Kingda.fla,绑定KingdaMCDocumentClass。
确保库中已有设好KingdaMC类链接的symbol。

设置方法如图:


点击放大

先把第一帧代码全部删掉。Ctrl+Enter测试一把。是不是有十个MC出来啊。
然后再像图中那样加上第一帧代码,和舞台元件乐一乐。就是不按照Document Class规矩干干,呵呵。

那么它到底是什么?
简单的说,是一个用来取代原有散乱的时间轴代码的标准解决办法。
当一个Fla文件被编译时,Document Class就被主动建立了。我们可以理解为Flash IDE偷偷加上了如下代码:

//path表示Document Class的包,如上一节中说过的org.kingda;
//DocClass是指Document Class的名字
import path.DocClass; 
var TouTouDe:DocClass = new DocClass();
//实例名TouTouDe是我乱写的,哈哈。可能是默认的instance1之类的名字

这样的好处是所有的时间轴逻辑都剥离到Document Class类文件中,一旦成为一个独立的类文件,那么很方便的可以和CVS软件结合起来。对团队合作(Designer + Coder)来说是一大利好。对新手和小项目来说,没什么优点和必要。

下面说点高级讯息和运用:
有什么坏处?
坏处大大的有。那是相当的不习惯。
所有的舞台上的元件都别直接用属性来命名(比如说随便命名为BigKingda),不然就会出现以下出错讯息:

ReferenceError: Error #1056: 无法为 KingdaMCDocumentClass 创建属性 BigKingda。

当然这个限制只在与舞台上的元件,在元件类部直接命名子元件没有问题,在Timeline写相关的代码没问题。

重要:Document Class初始化顺序怎样?
黑羽个人的研究结果:一旦设置了Document Class,那么初始化顺序如下:
Document Class初始化 > 主时间轴代码执行 > 舞台元件绑定的类初始化 > 元件的时间轴代码初始化 >..

下面的层次按这样的规律循环。

Ok了,三大特色到此详细介绍完了。
尽量讲的浅俗易懂,大家明白就好。而且黑羽也加上了一些高级讯息供老鸟参考。喜欢的顶一把!^_^

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 笔记本自动更新到一半太慢了怎么办 华为麦芒5音量下键乱跑了怎么办 麦芒6手机QQ视频没声音怎么办 18:9看16:9黑边怎么办 华为畅享7s声音小怎么办 华为畅享8手机声音小怎么办 华为畅享8plus声音小怎么办 荣耀7x锁屏密码忘记怎么办 华为荣耀7x锁屏密码忘记了怎么办 苹果耳机进水后声音变了怎么办 华为荣耀开了数据用不了怎么办 华为手机高德地图信号弱怎么办? 手机QQ浏览器看视频有广告怎么办 手机显示网络连接但不可上网怎么办 华为手机关机后开不了机怎么办 华为畅享8p相机拍照模糊怎么办 手机触屏不准怎么办荣耀青春版九 华为手机锁屏手势密码忘了怎么办 荣耀手机锁屏密码忘了怎么办 华为p20隐私空间密码忘了怎么办 安全管家隐私保护的密码忘了怎么办 华为手机自带截图键删除了怎么办 飞科电吹风吹一会就断电怎么办 住酒店时电吹风吹坏了怎么办 把话费充到停机的号码上去了怎么办 电信手机卡充值了还停机怎么办 电信手机一直没用却欠费了怎么办 苹果se开起4g信号不好怎么办 触屏华为手机充不了电怎么办 华为手机自拍出来的字反向怎么办 华为微信隐藏了怎么弄出来怎么办 酷派手机酷管家密码忘了怎么办 手机磁盘目录不具有读写权限怎么办 魅族手机像素突然变模糊了怎么办 手机忽然所有软件都没了怎么办 魅族读书下架的书怎么办 我的电信大王卡激活了没信号怎么办 三星翻盖手机忘记锁屏密码怎么办 小米2s电信版信号不好怎么办 4s微信版本过低怎么办 换了一个城市牵的电信网线怎么办