相信很多人和我一样,看到熟悉的duplicateMovieClip、attachMovieClip在AS3中都被remove(拿)掉了,一定会很好奇,复制MC这么一个“简单”的功能在AS3中该怎么实现呢?
在帮助中给出的线索是用MovieClip构造函数来实现这一功能,这句话看起来就像是个谜,究竟构造函数怎么才能具有这样的功能呢?
于是我试着在场景中建一个元件,在库中还像以前一样打开该元件的链接属性,AS3中ID是不可用的,那么写个类名好了,点确定之的后,系统提示,找不到相关的AS类文件,并且自动的设置一个,经过这一步,这个库中的元件就变成一个类了,之后回到场景中用new操作名来新建几个元件,“复制”的功能竞然就这样实现了。
利用for循环,还可以批量生成新的元件的实例,也是就批量复制的效果。
var ar:Array = new Array(5);
for (var i = 0; i<5; i++) {
ar[i] = new mMC();
ar[i].x = i*10;
ar[i].y = i*10;
addChild(ar[i]);
}
对于学习AS程度不深的人来说,在接触到AS3的时候,我们面临的往往是一些简单功能的实现,一旦这些看似简单的问题一个个的解决掉,那么就比较容易上手AS3了。网上最先讨论AS3的人多是些高手,并且很多人是从flex开始入手AS3的,因此,看到很多的示例和代码都是以 package 开头,花括号结尾的纯AS文件,让人摸不清头脑,难道AS3的学习必须是从package 开始吗?
个人以为,不是这样的,特别是在flash9推出以后,在一些时间轴和代码混合结构的flash文件中,依旧可以按照以前的习惯来使用flash,变的只是一些类的层次关系。作为初学者,还是可以在时间轴中按照以前的习惯来书写代码,AS2中没有使用过自定义类的,AS3中同样可以很少用到,这或许算得上是一种平民化的用法,但这样更有利于我们从AS2向AS3的过渡。
当然,类的基本知识还是必要的,特别是AS3中,MovieClip的众多属性已经被“分散”到它的父类中去了,在这种情况下,为了搞明白是否具有某个属性,或是为了解某个属性的用途,就必须从它的父类中逐一进行查找。
发一个实例,库中有一个方框线的元件,加上阴影滤镜后,再转换成元件,这个元件的链接属性窗口中设置类名为myMC2,场景中用下面的代码,复制出5个mc,并且分散排列。
var ar:Array = new Array(5);
for (var i = 0; i<5; i++) {
ar[i] = new myMC2();
ar[i].x = i*40 + 30;
ar[i].y = (i%2)*20 + 30;
addChild (ar[i]);
}
压缩包下载