我正在使用 flash.utils.getDefinitionByName 试图获取艺术 Assets 。我经常使用这个功能,直到现在还没有遇到问题。检查:
assetName = Assets.MegaBerry; // works
assetName = getDefinitionByName("Assets.MegaBerry") as Class; // doesn't work
有没有搞错??第二行的错误响应是“未找到变量”。
如果重要:Assets 是我的根源目录中的一个文件(它没有包;Assets 是完全限定的名称),我尝试将:
import Assets;
在没有运气的情况下登顶。
作为引用,在 Assets.as 我有:
[Embed(source = "../art/Inventory/MegaBerry.png")]
public static var MegaBerry:Class;
最佳答案
您的问题是将资源嵌入 Assets
类将创建一个属于该类的 Class
类型的静态变量 - 这是您在使用 Assets.MegaBerry
时所引用的:Class 类型的变量(!)。
但是,它不会将 MegaBerry 类注册为完全限定的类名。为此,您必须在应用程序中的某个时刻使用 - 谁会猜到 - registerClassAlias
:
registerClassAlias("Assets.MegaBerry", Assets.MegaBerry);
之后,在调用
getDefinitionByName
时,它将在其他任何地方可用。** 编辑 **
嗯,这是一些意想不到的行为......事实证明,嵌入的类实际上是自动注册的,但在
{className}_{variableName}
下,而不是您期望的符号。所以使用:getDefinitionByName("Assets_MegaBerry") as Class;
应该诀窍。
registerClassAlias
也可以,但是你需要调用 getClassByAlias
而不是 getDefinitionByName
。抱歉搞混了。** 结束编辑 **
您还可以使用 Embed 标记将资源注入(inject)到单独的类文件中,然后您可以使用
getDefinitionByName
或简单地使用导入按预期引用该文件:package assets {
[Embed(source="../art/Inventory/MegaBerry.png"]
public class MegaBerry extends BitmapData {
}
}
关于actionscript-3 - getDefinitionByName 未找到存在的变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10374031/