0

3つの別々のシンボルで構成されるムービークリップがあります。シンボルのうちの2つは、60フレームにわたってアルファトゥイーンされています。シンボルの1つはまったくトゥイーンされていません。すべてのシンボルは別々のレイヤーにあり、アクションスクリプト用のフレーム60にキーフレームがある4番目の空のレイヤーがあります。

フレーム60のアクションスクリプトは単に「stop();」です。。

ムービークリップのインスタンスをドキュメントクラスから動的にステージに追加しています。「stop();」がある場合 そこで、ムービークリップがステージに表示され、フレーム60に直接スキップし、そこで正常に停止します。

「stop();」なし そこでは、ムービークリップがアルファトゥイーンを完全に再生しますが、明らかに継続的にループします。

Event.COMPLETEを手動でディスパッチしてそれをリッスンすることも機能せず、とにかくそのようにしないことをお勧めします。

ムービークリップをステージに追加するコードは次のとおりです。

//initialize the gameplay, remove title screen.
    private function initialize_gameplay():void
    {

        //remove the title screen
        initialize_title_screen(true);

        this.screen_transition_obj  = new tide_out_video();         
        this.addChild(this.screen_transition_obj);

        this.game_board = new tidepool_gameboard();

        this.screen_transition_obj.addEventListener(Event.COMPLETE,swap_transition_video_for_screen);

    }

    //replace the current transition video with the screen it was transitioning to
    private function swap_transition_video_for_screen(e:Event){

        this.addChild(this.game_board);

        if(this.screen_transition_obj != null){
            if(this.getChildByName(this.screen_transition_obj.name)){
                this.removeChild(this.screen_transition_obj);
            }
            this.screen_transition_obj.removeEventListener(Event.COMPLETE, swap_transition_video_for_screen);
            this.screen_transition_obj = null;
        }




    }

ムービークリップのクラスはtidepool_gameboardであり、ムービークリップへの参照を格納するドキュメントクラスのプロパティはgame_boardです。

stop();を置く理由 ムービークリップのフレーム60で、トゥイーンせずに最後までスキップしていますか?

アップデート:

イベントリスナーの結果としてではなく、即座にムービークリップをステージに追加すると、この問題は、ムービークリップがイベントリストナーに追加された場合にのみ発生します。

4

1 に答える 1

0

今はかなり当たり前のように見えるので、これを見落としたなんて信じられません。

質問に投稿されたコードでは、 this.game_boardの新しいインスタンスを初期化し、ビデオクリップのイベントリスナーに基づいて遅延後にステージに追加しました。アニメーションは再生中ですが、クリップがステージに追加される前に再生されています。

この質問に答えてくれたalecmceに感謝します。

私は彼のEvent.ADDED_TO_STAGEイベントリスナーを実行しましたが、それが機能したため、MovieClipはステージに追加されて独自のタイムラインの再生を開始するまで待機せず、オブジェクトをインスタンス化した瞬間に開始するだけであることがわかりました。

これは、完全に機能する新しいコードです。

    //initialize the gameplay, remove title screen.
    private function initialize_gameplay():void
    {

        //remove the title screen
        initialize_title_screen(true);

        this.screen_transition_obj  = new tide_out_video();
        this.addChild(this.screen_transition_obj);

        this.screen_transition_obj.addEventListener(Event.COMPLETE,swap_transition_video_for_screen);

    }



    //replace the current transition video with the screen it was transitioning to
    private function swap_transition_video_for_screen(e:Event)
    {

        this.game_board = new tidepool_gameboard();
        this.addChild(this.game_board);



        if (this.screen_transition_obj != null)
        {
            if (this.getChildByName(this.screen_transition_obj.name))
            {
                this.removeChild(this.screen_transition_obj);
            }
            this.screen_transition_obj.removeEventListener(Event.COMPLETE, swap_transition_video_for_screen);
            this.screen_transition_obj = null;
        }
    }
于 2012-05-11T16:55:58.373 に答える