您现在的位置: 弘智首页 > 网页设计 > Flash >

学习AS3菜鸟起飞吧之—显示类

时间:2012-10-24 来源:弘智教育 点击: 次
DisplayObject类

 DisplayObject类是所有显示类的抽象类,它具有所有显示类的共同属性、方法和事件。见图1

       DisplayObject类的部分属性、方法和事件

上面列出的属性、方法和事件是显示类所共有的,也就是说由任何一个显示类创建的实例都会具有这些属性、方法和事件。
 有了DisplayObject这个抽象类,就可以通过一种类和类之间的关系来编写显示类,这种关系叫继承。比如:A类继承了B类,A类就具有了B类的属性、方法和事件。就是说,A类即使没有编写B类的属性、方法和事件,通过继承A类也具有了B类的属性、方法和事件。

 在继承关系中,如果A类继承了B类,则称A类为子类B类为父类,继承可以是多层进行的,即A类可以继承B类,B类也可以继承C类。
 所有的显示类都继承了DisplayObject类,所以DisplayObject类是所有显示类的父类,所有显示类都具有DisplayObject类的属性、方法和事件。

InteractiveObject类

 在DisplayObject类的子类中,一些类具有交互功能,一些类不具有交互功能。因此,可以对显示类进一步的抽象,抽象出交互类和非交互类。
 交互类的名称为InteractiveObject类,定义了具有交互的属性、方法和事件。而非交互类由于没有处理事件的任何功能,所以不存在任何属性、方法和事件。所以,ActionScript3.0并没有把非交互类加到内置类中,而是让所有的非交互类直接继承DisplayObject类。

 非交互类有AVM1Movie类、Bitmap类、MorphShape类、Shape类、StaticText类和Video类。见图2

       6种非交互类的功能

在6种非交互类中,StaticText类用于创建静态文本实例,静态文本只能使用“文本工具”来创建,Bitmap类只能使用程序来创建,Shape类即可以使用工具也可以使用程序来创建实例。

 对于交互类InteractiveObject来说,主要定义了交互所需的属性、方法和事件利用InteractiveObject类可创建右键菜单及处理双击事件等大部分事件。见图3

      InteractiveObject类的部分属性、方法和事件

下面做一个右键菜单的实例:

1、打开Flash新建一个Flash文档
2、把图层1的名称改为mc,在图层的第一帧创建一个实例,名为mc的影片剪辑实例。
3、添加名为as的图层,单击第一帧,打开动作面板输入代码:
  1. //创建和引用ContextMenu类的实例

  2. var myContextMenu = new ContextMenu();

  3. //创建名为“中国教程网”的单选项

  4. var item:ContextMenuItem=new ContextMenuItem("zjs35")

  5. //注册单选菜单事件

  6. item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuSelectHandler);

  7. //隐藏内建菜单

  8. myContextMenu.hideBuiltInItems();

  9. //把菜单选项添加到ContextMenu类的实例中

  10. myContextMenu.customItems.push(item);

  11. //设置影片剪辑的contextMenu属性

  12. contextmenu_mc.contextMenu=myContextMenu

  13. //定义接收事件函数

  14. function menuSelectHandler(e:ContextMenuEvent){

  15.         trace("this is 中国教程网")

  16. }
复制代码
4、测试影片,右击影片的空白处,没有出现我们的右键菜单,

5、右击影片剪辑,隐藏内建菜单,出现自定义菜单

6、选择菜单的“中国教程网”选项,可在输出面板中输出“this is 中国教程网”的信息。

 InteractiveObject类的contextMenu属性用于创建右键菜单,由于MovieClip类是交互类,所以继承了InteractiveObject类的contextMenu属性,可以创建影片剪辑实例的右键菜单。
容器与DisplayObjectContainer类

 具有交互功能的显示类都继承自InteractiveObject类,这些显示类可分为SimpleButton类、TextField类、Loader类、Sprite类、Stage类和MovieClip类。见图4

           6种交互类的功能

6种交互类中,按其是否能嵌套其他显示实例的功能,可分为容器类和非容器类。容器类的实例能嵌套其他实例,Loader类、Sprite类、Stage类和MovieClip类属于容器类。SimpleButton类和TextField类属于非容器类,非容器类的实例不能嵌套其他显示实例。因此就有了所有容器的抽象类DisplayObjectContainer类。

 在Loader类、Sprite类、Stage类和MovieClip类4个容器类中,Loader类、Sprite类、Stage类直接继承DisplayObjectContainer类,MovieClip类又继承了Sprite类,所以如果不使用时间轴功能,用Sprite类比用MovieClip类效率更高。
 DisplayObjectContainer类主要实现了显示实例、移除显示实例和深度管理等功能。见图5

           DisplayObjectContainer类的部分属性、方法和事件

下面做一个遍历容器内的所有影片剪辑实例:

1、新建一个Flash文档
2、把图层一的名改为mc,在mc图层的第一帧创建6个影片剪辑实例,随意摆放在舞台中
3、新建名为as的图层,单击as图层第一帧,打开动作面板,输入代码:
  1. //索引的开始

  2. var i:int = 0;

  3. //索引的结束,就是影片剪辑的个数

  4. var len:int = this.numChildren;

  5. //循环查找

  6. for(i;i<len;i++)

  7. {

  8.       //根据索引得到影片剪辑实例

  9.   var mc:MovieClip= this.getChildAt(i);

  10.       //输出影片剪辑实例的实例名

  11.  trace(mc.name);

  12. }
复制代码
4、测试影片,可在输出面板中看到输出的信息
 从输出的信息可以看出,即使没有使用“属性”面板给影片剪辑实例命名,可以通过索引来引用它们,并且系统已经给这些实例指定了实例名。

      
弘智主页 | 弘智介绍 | 培训课程 | XML地图