AS3 - 从Document类外部访问库项目

时间:2009-08-28 03:16:08

标签: flash actionscript-3 class instantiation

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

例如,如果我在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 个答案:

答案 0 :(得分:1)

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

您应该为加载的swf库提供加载的swf访问权限。尝试使用LoaderContext

脱离我的头顶:

var loader:Loader = new Loader();
var ctx:LoaderContext = new LoaderContext(false,ApplicationDomain.current);
loader.load(yourRequest,ctx);

答案 1 :(得分:0)

我永远不会记得这是一个问题。我想(已经有一段时间了!)你需要编写一个派生自MovieClip或类似代码的代码类,并在其属性的某个地方与库项目相关联。当然,一旦完成,您可以将库类视为与任何其他类相同。

编辑:

试试这个:

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

仔细阅读你的问题后,我意识到这是装载机侧的代码,而不是loadee方面的代码。绝对吠叫正确的树。

答案 2 :(得分:0)

尝试更像这样的事情:

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

我认为对于库符号,符号名称的开头不应包含名称。

答案 3 :(得分: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.
     .........
    }
   }
  }  

我发现这种情况每次都有效,不能说它是否正确。但它对我有用。

相关问题