Actionscript 3 AS3 getDefinitionByName-错误#1065:未定义变量{class name}

Actionscript 3 AS3 getDefinitionByName-错误#1065:未定义变量{class name},actionscript-3,flash,Actionscript 3,Flash,我的问题比标题所暗示的要复杂一些。我在一家拥有20款flash游戏的公司工作。我们的玩家也有他们可以定制的化身,这些化身在我们的游戏中使用 我们有一个文件,Avatar.swf,它由我们的预加载程序加载,然后传递到GameName.swf。我想利用这个阿凡达电影剪辑,创建一个工厂类,这样我们就可以在游戏中有很多这样的实例 我可以毫无问题地从加载程序中获取阿凡达电影剪辑的实例。我知道有两种方法可以从AS3中的实例获取构造函数 1.)对象(myInstance).构造函数作为类 2.)getDefi

我的问题比标题所暗示的要复杂一些。我在一家拥有20款flash游戏的公司工作。我们的玩家也有他们可以定制的化身,这些化身在我们的游戏中使用

我们有一个文件,Avatar.swf,它由我们的预加载程序加载,然后传递到GameName.swf。我想利用这个阿凡达电影剪辑,创建一个工厂类,这样我们就可以在游戏中有很多这样的实例

我可以毫无问题地从加载程序中获取阿凡达电影剪辑的实例。我知道有两种方法可以从AS3中的实例获取构造函数

1.)对象(myInstance).构造函数作为类

2.)getDefinitionByName(getQualifiedClassName(myInstance))作为类

1间歇性地工作,但大约有三分之一的时间我会收到结果实例抛出的空引用错误。我不知道为什么,但这不是一个一贯的问题。就好像脚本在那里,而资产库却不在那里。它在调试模式和发布模式下都会发生。使用FlashDevelop和CS5.5编译时也会发生这种情况

2抛出错误#1065:未定义变量化身。我理解这是因为我没有导入阿凡达包并声明了一个虚拟的阿凡达实例,但这就是重点。例如,如果我们通过添加一件新的衣服来更改虚拟形象,我们肯定不想查看不断扩大的游戏列表并重新编译它们。换句话说,我不想在每一个游戏中都使用阿凡达代码,它会否定在我们的预加载程序中加载它的意义

有人有什么建议吗

谢谢

  • 确保您的Avatar.swf已加载到相同的文件中
  • 确保您已经使用了每个化身类(例如,在avatar.swf的文档类中),或者如果它们是Flash库项目,请将它们导出到avatar.swf的第1帧中

  • 听起来是个问题。您正在将其他SWF加载到哪个应用程序域中?我建议您根本不应该使用
    getDefinitionByName()
    。虽然它可以工作,但我认为最好使用
    appDomain.getDefinition()
    引用特定的应用程序域。使用
    getDefinitionByName()
    您依赖于添加到当前作用域的类,这取决于您在加载程序上下文中指定的应用程序域。相反,您可以从应用程序域请求加载内容的定义。如果您确实有一个定义:
    loader.contentLoaderInfo.applicationDomain.getDefinition('definition')
    ,这将始终有效。感谢您的回复。我很确定他们都在同一个领域,但我还没有看到文档,所以我会仔细看看。这是否可以解释使用Object(instance).constructor时出现的间歇性错误?关于第二个链接,我已经看过了,但我不想让代码成为每个游戏的一部分,因为那样的话,每次我对化身进行更改时,我都必须重新编译所有的游戏。这正是我试图避免的。这两个方面都是否定的:
    对象(实例)。构造函数
    语句只会在
    实例
    null
    时导致错误,因此可能存在加载操作未完成的问题。第二部分是本文的重点。就是在加载的类中使用类(或导出到第1帧),在更改其内容时,无论如何都必须重新编译这些类。不过,有必要将要实例化的类包含到二进制文件中,否则就没有任何东西可供
    getDefinitionByName
    查找。