在AS2中,库中的几个元件可以同时链接同一个类文件,从而实现相同的控制效果,在AS3中这种方式不再被接受了,如果这么做会将收到一个警告,“请输入一个与其它库元件无关联的特有类名称”。
如果想得相同效果的两个元件,现在比较方便的办法就是将已有的类做为父类,分别用两个子类来继承它,再用这两个子类去分别链接到库中的元件。
由此来看,AS3版本的库元件,应该看成是类 的一部分,共同构成了类。而AS2中的库元件,更像是类的实例,实例与类文件的链接,实际上是在运行时刻才真正进行的。AS3中的库元件在链接时就进行了检测,只有名称不冲突的情况下,才能链接在一起。
下面还有一个例子来说明,AS3的库元件是类文件的一部分。
假定库中两个元件都是由同一个类继承而来,在两个元件中各自有一个文本框元件,实例名为 txt ,当我们在父类中写入直接对 txt 进行操作的代码,编译时就会出现一个internal 命名冲突的错误。将操作 txt 的代码转入到子类以后,这个内部命名冲突就消失了。
是什么原因造成在父类中不能使用 txt 实例名来控制呢?我想,是因为在两个库元件中的两个文本框对象,分别代表两个不同的对象内容,虽然它们的实例名是一致的,但实际上在父类中无法用一个实例名来进行区分,所以会有冲突,但当相关的操作代码分别出现在子类中时,代码的作用范围决定了它的控制对象,因而不会造成冲突。
由此联想到另外的问题,在制作课件或是做小游戏程序时,我们习惯上还是先做界面的内容,然后添加代码,界面的变动相对是比较频繁的,因而相关的代码也会来回的改动。在MVC模式的设计中,界面相关的类属于View(视图),将相关的控制类以组合的方式包含进来,这样就可以避免一些因为复杂继承带来的界面元件使用上的混乱。从类图上来看,View类位最上层,属于上层建筑,不再进行继承或是进行很少的继承。
最后再来总结一下库元件和类文件的关系,AS3中,库元件是类文件的一部分,在类文件中不需要再进行声明,而是可以直接进行使用。如果多个元件中使用了同一实例名,那么这个实例名的控制代码应该放到子类中去,避免出现interna.冲突。