在上一节中我们用到了在库中加载一个元件,我们还有另一个方法来加载一个元件,就是用"反射"的方法,反射就是用库中元件的名字(字符串)去得到我们想要的元件,用代码去把它变成一个类. 我们在库中建立两个MC,并用上一节的方法将它们导出,名字分别为:Mc1和Mc2,我们要将这两个元件加载 到场景上,按照上一节的方法,我们应该这样做: package net.smilecn{ import flash.display.Sprite; import flash.display.MovieClip; public class MainForm extends Sprite{ public function MainForm(){ var mc1:MovieClip = new Mc1(); addChild(mc1); var mc2:MovieClip=new Mc2(); addChild(mc2); } } } 那么如果用反射的方法应该怎样做呢,看下面的代码: package net.smilecn{ import flash.display.Sprite; import flash.display.MovieClip; import flash.utils.getDefinitionByName; public class MainForm extends Sprite{ public function MainForm(){ var ClassReference:Class = getDefinitionByName("Mc1") as Class; var instance:MovieClip=new ClassReference(); addChild(instance); } } } 这段代码只加载了Mc1这个元件,而且我们发现代码比上一种方法更复杂一些,那为什么要使用反射这种方法呢,我们在看一段代码: package net.smilecn{ import flash.display.Sprite; import flash.display.MovieClip; import flash.utils.getDefinitionByName; public class MainForm extends Sprite{ public function MainForm(){ for(var i=1;i<=2;i++){ var ClassReference:Class = getDefinitionByName("Mc"+i) as Class; var instance:MovieClip = new ClassReference(); addChild(instance); } } } } 我们发现现在这种写法是不是更简单的一种写法,当库中有名字为Mc1,Mc2,Mc3……这种更多的MC时,我们只需要改变循环变量的范围就可以了。 |