1

タイムラインに子が含まれているswfファイルを埋め込んでいます。このような:

[Embed(source="assets/skyscraper200x600.swf")]
private var Skyscraper  :Class;

swfのすべての子にはインスタンス名があります。FlashCS5でswfを作成するときに、それを再確認しました。私はこれらの子供たちに次のような名前でアクセスしようとしています:

_bg = MovieClip(new Skyscraper());
_pig = MovieClip(_bg.getChildByName("chara_pig"));
_arrow = MovieClip(_bg.getChildByName("arrow_banner"));

ただし、_pigと_arrowはど​​ちらもnullになります。

さらに奇妙なのは、デバッガーでSkyscraperオブジェクトを見ると、かなり奇妙なクラス名と、その唯一の子(子がない)としてローダーが表示されていることです。これはどうしたの?

swfを埋め込まない場合は、上記のようにアクセスできますが、ローダーを使用してロードします。しかし、この場合はできません。swfを埋め込む必要があります。

では、どのようにして埋め込みswfsの子にアクセスできますか?

埋め込まれたswfのライブラリ内のクラスにアクセスすることについて話しているのではなく、タイムライン上のインスタンスについて話しているのです

4

3 に答える 3

4

これが解決策です。この解決策を見つけるのに役立った手順も表示されます(describeTypeはあなたの友達です):

public class Demo extends Sprite {

    [Embed(source="test.swf")]
    private var Test:Class

    public function Demo() {
        //first guess is that embed SWF is a MovieClip
        var embedSWF:MovieClip = new Test() as MovieClip;
        addChild(embedSWF);

        //well, emebed SWF is more than just a MovieClip...       
        trace(describeType(embedSWF));//mx.core::MovieClipLoaderAsset
        trace(embedSWF.numChildren);//1
        trace(describeType(embedSWF.getChildAt(0)));//flash.display::Loader

        var loader:Loader = embedSWF.getChildAt(0) as Loader;

        //the content is not already loaded...
        trace(loader.content);//null


        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(){
            var swf:MovieClip = loader.content as MovieClip;
            var child:MovieClip = swf.getChildByName("$blob") as MovieClip;
            //do nasty stuff with your MovieClip !
        });
    }
}
于 2012-06-05T09:28:40.900 に答える
1

このチュートリアルの最後にhttp://jadendreamer.wordpress.com/2010/12/20/flash-as3-embedding-symbols-from-external-swf-game-tutorial それを行う方法の例があります

于 2012-06-04T17:43:02.393 に答える
0

1つの解決策は、swfをオクテットストリームとして埋め込み、そのバイトを再構成することです。 ただし、mimeTypeを「application / x-shockwave-flash」に設定しただけで、通常どおりに機能するMovieClipが得られることをどこかで読んだことを覚えているようです。

于 2012-06-04T17:13:47.450 に答える