1

您如何从文档类以外的类访问库项目?

例如,如果我在 Flash 中创建一个影片剪辑并将其导出为名为 Foo 的 Actionscript,我可以在文档类中执行此操作:

var f = new Foo();
this.addChild(f);

它应该出现在舞台上。但我需要能够从其他类创建该对象的其他实例。如果我在 SomeOtherClass.as 中使用上面相同的代码,我在舞台上什么也得不到,显然是因为这个类不知道库中的 Foo 对象。

我知道我可能需要以某种方式使用 appplicationDomain.getDefinition。这不起作用:

var a = new ApplicationDomain(ApplicationDomain.currentDomain);
var foo: Class = a.getDefinition ( "com.me.CustomClass" ) ;
var f = new foo( ) ;
addChild ( f ) ;

TypeError:错误#1007:尝试在非构造函数上进行实例化。

4

4 回答 4

1

看起来像一个应用程序域问题。加载的 swf 无法访问加载器中定义的类。

您应该授予加载的 swf 对加载程序 swf 库的访问权限。尝试使用LoaderContext

在我的头顶上:

var loader:Loader = new Loader();
var ctx:LoaderContext = new LoaderContext(false,ApplicationDomain.current);
loader.load(yourRequest,ctx);
于 2009-08-28T04:16:35.650 回答
0

我不记得这是个问题。我认为(已经有一段时间了!)您需要编写一个派生自 MovieClip 或类似的代码类,并在其属性中的某处与库项目相关联。当然,一旦完成,您可以像对待任何其他类一样对待库类。

编辑:

尝试这个:

var foo:Class=loaderInstance.contentLoaderInfo.applicationDomain.getDefinition("MyClass");
var x:*=new foo();

仔细阅读您的问题后,我意识到这是加载器端的代码,而不是加载器端的代码。不过,绝对是在正确的树上吠叫。

于 2009-08-28T03:38:29.843 回答
0

尝试更多类似的东西:

var foo:Class = ApplicationDomain.currentDomain.getDefinition("SymbolName") as Class;

我相信符号名称的开头不应该有一个包名称,对于一个库符号。

于 2009-08-28T03:44:31.360 回答
0

我发现这些答案有些过头了,因为我使用任何类的库项目所做的只是像任何标准导入一样导入它。当然,这就是我们选择 Export for Actionscript 的原因。

例如:

package 
{
   import foo;                     // Library MovieClip
   import flash.display.MovieClip; // Must import MovieClip to Extend it.
   .......

   public class something extends MovieClip
   {
     private var _foo:foo;   // Create a local reference of the imported Library Item.
     ......

    public function something():void
    {
     _foo = new foo(); // Create a new instance of the imported Library Item.
     .........
    }
   }
  }  

我发现这每次都有效,不能说它是否是正确的方法。但它对我有用。

于 2011-04-12T15:46:44.647 回答