2011-05-28 29 views
3

如何将字符串转换为没有getDefinitionByName的类,因为该类未链接到库项目,并且getDefinitionByName仅适用于链接到库或已初始化的类!有没有办法?或者我必须初始化我想要使用的每个课程?这对Adobe来说真是太愚蠢了!AS3字符串到类

+0

+ 1,这很有趣,我不知道另一个名字呢! – Eugeny89 2011-05-28 21:06:24

+0

我不确定你的意思是“已经初始化”的类,而不想初始化你想要使用的每个类。你如何通过初始化来使用它们? – grapefrukt 2011-05-28 23:35:39

回答

3

getDefinitionByName()将与任何类名称一起工作,链接到库或不。你的问题很可能是因为你没有提到代码中的类名,它根本不在你的swf中。您必须确保在您的代码中至少有一个地方使用了该类,否则将不会编译该类。

这可以很简单,只需将它们放在主类的一行即可:

public class Main { 

    public function Main(){ 
     ClassYouWant; 
     AnotherClass; 

     codeThatDoesStuff(); 
    } 

} 
+0

没关系,我想要的不能完成!除了有eval以外的任何语言。我的想法是,我会创建许多类,而不必在任何地方启动它们! – Alex 2011-06-07 10:37:45

+0

当你说“不必在任何地方启动它们”时,我不明白你问的是什么。你能提供某种例子吗? – grapefrukt 2011-06-07 13:15:49

+0

我有一个游戏。我希望每个级别都是扩展LevelTpl类的类,比如“class Level1 extends LevelTpl”。然后我想调用像“Level”+ curLevel这样的任何级别。问题是在AS3中没有eval,所以我将不得不使用getDefinitionByName,但getDefinitionByName仅适用于所有已初始化的类!所以如果我制作100个关卡=> 100个关卡,我必须在使用它们之前启动它们!我希望我不必这样做! – Alex 2011-06-12 17:59:04

1

简短的回答:

如果你想避免包括类引用(由@grapefrukt建议),你就必须编译库这些类和参考,从你的主要应用程序RSL(运行时共享库​​)

长的答案:

有没有其他的方式,通过它的名字来创建一个类,而不是使用getDefinitionByName()。

但是有几种编译代码的方法。默认情况下,如果您有一个不包含库的应用程序,它将不会编译您的代码中未引用的类。你称这种愚蠢的,但有一个很好的理由:它减少了你的瑞士法郎的大小,因此下载你的应用程序的时间。

如果您在使用图书馆有,他们可以从主应用程序中引用三种方式:

  • 合并成代码
  • 运行时共享库​​(RSL)
  • 外部

的第一个选项将采用主应用程序中引用的库中所有(也是唯一)的类。这导致较小的swf大小。

第二个选项将整个库编译成一个单独的swf,由主应用程序加载。这会导致更大的文件大小,但同一个swf可以被多个应用程序使用。对你来说最重要的是:所有的类都在swf中,所以它们可以被getDefinitionByName()引用,而不必在你的主应用中包含这个类。

enter image description here

+0

Ty,但我用它来制作Flash CS5中的flash游戏:)不是flex ... – Alex 2011-06-07 10:38:50

+0

@Alex您也可以链接到Flash CS5中的RSL(通过'高级ActionScript属性'),但我想编译你的库需要使用FlashBuilder,或者使用mxmlc编译器在命令行中执行。 mxmlc也可以编译仅限ActionScript的库;它不仅限于Flex。所以,你想要做的事情可以做到,但对你来说可能并不容易。 – RIAstar 2011-06-07 12:07:47

+0

@Alex看看我刚发现的内容:http://active.tutsplus.com/tutorials/workflow/how-to-use-an-external-library-in-your-flash-projects/ – RIAstar 2011-06-07 17:02:40