3

すべてのシンボルを保持したい assets.swf を作成しました。次に、埋め込みを行う Assets クラスを作成しました。次のようになります。

public class Assets extends MovieClip
    {
        [Embed(source="assets.swf", symbol="MyBox")]
        public static var MyBox:Class;

        public function Assets() 
        {

        }

    }

さて、他のクラスで、新しいボックスを作成したいと思います:

import com.company.Assets;
...
public function Game() 
{

    var myBox:MovieClip = new Assets.MyBox();
    addChild(myBox);

}

私はこれが間違っていることを知っており、「TypeError: エラー #1007: 非コンストラクターでインスタンス化が試行されました」というメッセージが表示されます。Assets クラスのアセットにアクセスするにはどうすればよいですか?

4

4 に答える 4

2

編集:ここで答えが見つかると思います。

クラスをロードした SWF からクラスを使用する場合は、次のことが当てはまりますLoader

private function onLoad(e:Event):void
{
 var domain:ApplicationDomain = LoaderInfo(e.target).applicationDomain;
 var Type:Class = domain.getDefinition("pack.MyComponent") as Class;
 var myBox:MovieClip = new Type();
 addChild(myBox);
}
于 2009-09-24T14:10:26.543 に答える
1

これを実現するもう 1 つの良い方法は、SWC をコンパイルして、別のクラスと同じようにインポートすることです。

SWC 内の AS 用にエクスポートされたすべてのシンボルは、同じスコープで使用できます。

これにより、コードの記述が大幅に節約され、アセットを SWF 内に直接埋め込むことができるため、複数のローダーを回避できます。

于 2009-09-24T16:00:59.270 に答える
0

Asset クラスで新しいオブジェクトを作成できます.. (これにより、再利用可能なアセットのプールを作成することもできます)

何かのようなもの:

public class Assets extends MovieClip
{
    [Embed(source="assets.swf", symbol="MyBox")]
    private static var MyBox:Class;

    public static function getNewBox():DisplayObject {
        return new MyBox();
    }

    public function Assets() 
    {

    }
}
于 2009-10-07T08:21:38.073 に答える
0

それでも .swf ルートが必要な場合は、次のことができます。

public class Assets extends MovieClip
    {
        [Embed(source="assets.swf", symbol="MyBox")]
        private static var _MyBox:Class;
        public static function get NewBox():MovieClip {
            return new _MyBox();
        }
    }
...

import com.company.Assets;
...
public function Game() 
{

    var myBox:MovieClip = Assets.NewBox;
    addChild(myBox);

}

別の方法は、Action Script で使用するシンボルをエクスポートし、代わりに .swc を使用することです。フラッシュ ファイル内の完全な名前空間でクラスを設定できるため、MyBox の場合は com.company.Assets.MyBox にすることができ、使用方法は意図したものと同様になります。

import com.company.Assets.*;
...
public function Game() 
{

    var myBox:MovieClip = new MyBox();
    addChild(myBox);

}
于 2009-09-24T16:09:36.067 に答える