0

私はActionScriptでモバイルアプリを開発しています。

.swfファイルをインポートしていますが、エラーが発生します:

Type was not found or was not a compile-time constant: MySwf.

これが私のコードです:

package
{
import flash.display.Sprite;
import flash.display.StageAlign;

    public class gyyyyppp extends Sprite
 {
    [Embed(source='assets/g1.swf')] public static const MySwf : Class;

    public function gyyyyppp()
    {
        stage.align = StageAlign.TOP_LEFT;

        var p3:MySwf= new MySwf();

        addChild(p3);
    }
  }
}

私が間違っていることは何ですか?

(ps私のswfファイルは非adobeプログラムで作成されています)私はFlashBuilderを使用しています

4

2 に答える 2

3

埋め込まれた SWF のカスタム メソッドを呼び出せるようにしたいと考えています。この SWF のグラフィックスを使用したいだけの場合は、@ MickMalone1983の回答が必要です。ただし、SWF の内容がMovieClipbutではない可能性があることを除いて、SpriteたとえばDisplayObjecttype:を使用する方が安全ですvar p3:DisplayObject = new MySwf()

カスタム メソッドの呼び出しに関する問題は、コンパイラがこのクラスに対してリンクできないため、埋め込まれた (または読み込まれた) SWF で定義されたクラスを参照できないことです。そのため、外部からアクセスできるメソッドを備えたインターフェイスを作成する必要があります。

  1. 埋め込み SWF のメイン クラスによってこのインターフェイスを実装します。

    public class MySwf extends Sprite implements MyInterface ...
    
  2. object を使用Loaderして埋め込み SWF をインスタンス化し、インスタンスを同じインターフェイスにキャストします。

    [Embed(source='assets/g1.swf', mimeType='application/octet-stream')]
    public static const MySwfData : Class;
    
    public function load()
    {
        var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onSwfLoaded);
            // we need the loaded code to be in the same (main) application domain
            loader.loadBytes(new MySwfData() as ByteArray, new LoaderContext(false, loaderInfo.applicationDomain));
    }
    
    private function onSwfLoaded(e:Event):void
    {
        var p3:MyInterface = (e.target as LoaderInfo).content as MyInterface;
            p3.myCustomMethod(); // myCustomMethod is defined in MyInterface
    
        addChild(p3 as DisplayObject);
    }
    

このようにして、埋め込まれた SWF とメイン アプリケーションの両方でカスタム メソッドが定義されるため、埋め込まれた SWF のカスタム メソッドを呼び出すことができます。

また、通常、-static-link-runtime-shared-libraries=trueメイン アプリケーションをコンパイルするときにコンパイラ フラグを指定します。

于 2013-02-01T00:55:24.917 に答える
3

埋め込みクラスを変数型として設定できないと思います。これを試してください:

var p3:MovieClip = new MySwf();
于 2013-01-31T23:24:43.607 に答える