1

ActionScript の Frame メタデータ タグに関する投稿がたくさんあることは知っていますが、それでも私の質問に対する答えは見つかりませんでした。

問題は、メイン クラス ヘッダーの上に Frame メタデータ タグを指定したことです。

package gameUI {
...
    [Frame(factoryClass="gameUI.MyPreloader")]
    public class Main extends Sprite { 

        public function Main()
        {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void
        { ...

また、同じパッケージ (gameUI) に MyPreloader.as というプリローダー クラスがあります。

package gameUI
{
    // imports..

    public class MyPreloader extends MovieClip 
    {
        // private vars ..

        public function MyPreloader() 
        {
            trace('preloader START');
            ...

私の IDE では、エラーや警告は表示されません。問題なくコンパイルされます。しかし、実行すると、Frame メタ タグをスキップして Main クラスのコードを実行するだけです。(MyPreloader のコンストラクターのトレースは出力されません)。

コンパイラの設定で指定されたいくつかの引数と関係があるのではないかと考えています。いくつかのこと、追加のコンパイラ引数を試しましたが、うまくいきませんでした。

Frame メタタグを無視する理由を知っている人はいますか? 私は今本当にイライラしています..

Flash Builder 4.6 を使用しています。Flex SDK 4.6 でコンパイルします。

ありがとう。

4

1 に答える 1

-1

メイン クラスはスプライトであるため、2 つのフレームを持つことはできません。それはあなたの問題の一部かもしれません。

ただし、最終的な目標を達成するために、デバッグしやすいプロセスを使用できる場合もあります。たとえば、これは1 つのアプローチです。私は通常、デフォルトのエクスポート フレームを 10 に設定し、スピナーをフレーム 1 に配置して、play() を発行します。

フレーム 1 でコンパイルする必要がある唯一のアセットは、スピナーにあります。その後、スピナーが回転してアセットがロードされる間、一時停止します (続行する前にそこでコンパイルされたすべてのものをロードする必要があるため)。すべてのアセットが読み込まれると、フレーム 10 に自然に進みます。タイムラインのフレーム 10 にゲッターとセッターが関連付けられたインスタンスがあるため、セッターがトリガーされると、読み込みが完了したことがわかります。

起動時に絶対にロードする必要があるアセット (たとえば、タイムラインで使用されることのないサウンドやビジュアル オブジェクト) については、「フレーム 10 でエクスポート」のみをチェックします。

このアプローチの利点は、実際のコンテンツに早くアクセスできることです (何かを表示する前に、デフォルト フレームでコンパイルされたアセットのみをロードする必要があるため)。ムービーの何パーセントがフレーム 10 でコンパイルされ、開始前にロードする必要があるかわかりません。

つまり、要約すると:

  1. フラの基本クラスをムービークリップにしてみてください
  2. それがうまくいかない場合は、アプローチの変更を検討してください
于 2012-09-22T15:48:57.403 に答える