[ActionScript 3]一步一步学ActionScript 3.0(六)
在上一节中我们用到了在库中加载一个元件,我们还有另一个方法来加载一个元件,就是用“反射”的方法,反射就是用库中元件的名字(字符串)去得到我们想要的元件,用代码去把它变成一个类。
我们在库中建立两个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时,我们只需要改变循环变量的范围就可以了。
下节继续。
(本教程如需转载请注明出处!)
http://www.51as.com/as3/as3-247.html 里面的文章是你发的?
你上面一个问题、
getDefinitionByName() 参数用的是实例名、如果在库中、实例名是不存在的吧。