0

広告を作成するために FlashDevelop で Flash プロジェクトを作成しました。

プリローダーは、Additional Compiler 引数を使用してセットアップされます。

-frame=NameOfLabel,NameOfMainClass

私のメインクラスは、トップ/デフォルトパッケージレベルで単に「メイン」と呼ばれています。

フレーム #1は、SWF のプリローダー部分であり、次のようになります。

  • 非常に少数のビットマップ、ベクター グラフィックス、およびテキスト (50kb 未満に抑えるため)。
  • 中央のYouTubeビデオ プレーヤー (ファイルサイズの制限にはカウントされません)。

フレーム #2には他のすべてがあります (Main クラスは基本的にすべての依存関係を埋め込みます)。これも:

  • プリコンパイルされた SWF からのアセット (ビットマップ、シンボル、フォント、XML データ);
  • インポートされたすべてのクラス (これは、他のクラスをインポートするすべてのクラスに対して再帰的です)。

私の大きな問題は、私がプロジェクトの 99.9% を完了してからずっと後に、クライアントが「リプレイ」機能を要求したことです。

プロジェクトを多かれ少なかれさまざまな状態 (Intro、Ready、SlideMenu など) に分割していますが、Flash ムービーを最初 (プリロードして表示していた場所) に簡単にリセットする方法がわかりません。 YouTube ビデオ)。

簡単な解決策は、Flash コンテナーを更新する ExternalInterface JavaScript メソッドを呼び出すだけですが、HTML/JavaScript 側で何が起こっているかを制御できるとは思いません。

AS3 から再生機能を呼び出す簡単な方法はありますか?

4

2 に答える 2

0

以下はトリックを行うようです!

private function onReplayClick(e:MouseEvent):void {
    var theStage:Stage = this.stage; //Temporarly store the stage.

    //Kill any animations happening:
    TweenMax.killAll(); //3rd party, may not be applicable for you :P

    //Remove ALL containers / child DisplayObjects
    SpriteUtils.recursiveRemove(theStage); //custom-made
    // (this object is no longer attached to the stage at this point)

    //Nullify any Singleton / Static variables:
    Main.INST = null;

    // Load the 'bytes' of the current SWF in a new Loader, then...
    // add it to the stage
    var swf:Loader = new Loader();
    swf.loadBytes( theStage.loaderInfo.bytes );
    theStage.addChild( swf );
}

DisplayObjects と静的変数 (Singleton インスタンスなど) の深い再帰的クリーンアップを実行すると、空白の段階が残ります。

その後、現在の LoaderInfo の bytes プロパティを介して SWF 自体をロードする新しいローダーをインスタンス化できます。

ローダーをステージに追加すると、再び起動して実行できます!

于 2013-06-12T21:28:41.490 に答える