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

私がこれまでに任意のクラスからライブラリ項目を使用するために行ったことは、標準のインポートのようにインポートすることだけであるため、これらの回答はやや調理しすぎていることがわかります。確かに、それが 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 に答える
0

このようなことをもっと試してください:

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

ライブラリシンボルの場合、シンボル名の先頭にパッケージ名を付けるべきではないと思います。

于 2009-08-28T03:44:31.360 に答える