首页 > ActionScript 3, 一步一步学ActionScript 3.0 > [ActionScript 3]一步一步学ActionScript 3.0(六)

[ActionScript 3]一步一步学ActionScript 3.0(六)

在上一节中我们用到了在库中加载一个元件,我们还有另一个方法来加载一个元件,就是用“反射”的方法,反射就是用库中元件的名字(字符串)去得到我们想要的元件,用代码去把它变成一个类。

我们在库中建立两个MC,并用上一节的方法将它们导出,名字分别为:Mc1和Mc2,我们要将这两个元件加载到场景上,按照上一节的方法,我们应该这样做:

  1. package net.smilecn{
  2.    
  3.     import flash.display.Sprite;
  4.     import flash.display.MovieClip;
  5.    
  6.     public class MainForm extends Sprite{
  7.        
  8.         public function MainForm(){
  9.            
  10.             var mc1:MovieClip = new Mc1();
  11.            
  12.             addChild(mc1);
  13.            
  14.             var mc2:MovieClip = new Mc2();
  15.            
  16.             addChild(mc2);
  17.            
  18.         }
  19.     }
  20. }

那么如果用反射的方法应该怎样做呢,看下面的代码:

  1. package net.smilecn{
  2.    
  3.     import flash.display.Sprite;
  4.     import flash.display.MovieClip;
  5.     import flash.utils.getDefinitionByName;
  6.    
  7.     public class MainForm extends Sprite{
  8.        
  9.         public function MainForm(){
  10.            
  11.             var ClassReference:Class = getDefinitionByName("Mc1") as Class;
  12.            
  13.             var instance:MovieClip = new ClassReference();
  14.            
  15.             addChild(instance);
  16.            
  17.         }
  18.     }
  19. }

这段代码只加载了Mc1这个元件,而且我们发现代码比上一种方法更复杂一些,那为什么要使用反射这种方法呢,我们在看一段代码:

  1. package net.smilecn{
  2.    
  3.     import flash.display.Sprite;
  4.     import flash.display.MovieClip;
  5.     import flash.utils.getDefinitionByName;
  6.    
  7.     public class MainForm extends Sprite{
  8.        
  9.         public function MainForm(){
  10.            
  11.             for(var i=1;i<=2;i++){
  12.            
  13.                 var ClassReference:Class = getDefinitionByName("Mc"+i) as Class;
  14.            
  15.                 var instance:MovieClip = new ClassReference();
  16.            
  17.                 addChild(instance);
  18.            
  19.             }
  20.            
  21.         }
  22.     }
  23. }

我们发现现在这种写法是不是更简单的一种写法,当库中有名字为Mc1,Mc2,Mc3……这种更多的MC时,我们只需要改变循环变量的范围就可以了。

下节继续。

(本教程如需转载请注明出处!)

  1. 2010年3月3日10:18 | #1

    http://www.51as.com/as3/as3-247.html 里面的文章是你发的?
    你上面一个问题、
    getDefinitionByName() 参数用的是实例名、如果在库中、实例名是不存在的吧。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.