getDefinitionByName适用于自定义类?

时间:2010-07-14 23:29:18

标签: actionscript-3

我想知道flash.utils.getDefinitionByName(name:String):Class是否适用于自定义类?如果类有一个带参数的构造函数会有问题吗?我告诉这个,因为我在packageA.packageB形式的包中有一个类,当我将类的名称输入上面的函数时,packageA.packageB.ClassName不起作用。我也尝试了(使用相同的结果)getQualifiedClass的输出,它给出了packageA.packageB :: ClassName。任何想法??

以下是属于导入文件的代码的一部分,例如import factory.scratchers。*;所有具有AlphaScratcher,DissolveScratcheer,ExplodeScratcher等名称的scratch元素。上述导入是否满足要求?

import factory.scratchers.*;
...
for ( var iArea:uint = 0; iArea < _totalScratchAreas; iArea++ ) {       
                var sourceArray:Array = new Array();
                var currentNameArray:Array = _globalAssetNameArray[iArea];
                var theScratcher:Scratcher;
                for ( var index:uint = 0; index < _globalMsgArray[iArea].length; index++ ) {
                    // here i would like to have something like:>
                    var ScratchClass:Class = getDefinitionByName( "factory.scratchers::ExplodeScratcher") as Class;
                    theScratcher = new ScratchClass( _assetGenerator, _mainSprite );
                    // instead of: - but it does not work not sprite shown on screen
                    theScratcher = new ExplodeScratcher( _assetGenerator, _mainSprite );
                    theScratcher.setBack( currentNameArray[index] );                    
                    sourceArray.push( theScratcher );

                    if ( _globalArray[iArea][4] == OPENEDAREA ) {
                        theScratcher.auto();
                    }
                }

3 个答案:

答案 0 :(得分:2)

您应该指定“不起作用”的含义。无论是运行时还是编译时错误都很重要。

getDefinitionByName的输入应该始终是一个格式为“package.subpackage.subpackage :: Class”的字符串,所以:

var MyClass:Class = getDefinitionByName("packageA.packageB::ClassName") as Class;
var myInstance:Object = new MyClass();

请注意,Flash不会在电影中包含ClassName,除非在代码中的某处特别提到。为避免这种情况,请将其放在代码主要部分的某处:

var MyClass:ClassName;

答案 1 :(得分:0)

是的,它适用于自定义类。只需通过在代码中的某处引用它来确保SWF知道该类,以便在编译时包含它的定义。如果您未在代码中的任何位置使用该类,则其定义将不会编译为SWF,因此您无法将其读回。如果你在某个地方使用它,这里是如何使用它:

var t:Object;
var type:Class = getDefinitionByName("packageA.packageB.ClassName") as Class;
if(!type)
  trace("can't find the definition");
else
  t = new type(/* arguments to the constructor*/);

答案 2 :(得分:0)

如果要链接自定义类,是否曾尝试添加“导入”? 或者,如果您将自定义类视为运行时共享库​​,则可以使用ApplicationDommain.getDefinition()代替。