0

6つのムービークリップのセットをarray_0として、別の6つのムービークリップのセットをarray_1として設定しました。これは、画面が異なる場合の2つの選択肢のようなものです。これらの配列は両方とも、all_arrayとして別の配列にネストされています。12個のムービークリップはすべて、初期ロード時に同じxとyに配置され、表示されているステージの外側にあります。インデックス作成に2つの異なるグローバル変数を使用したいと思います。たとえば、0〜5の範囲のcCat_Selと0〜1の範囲の別のcScr_Selです。cCat_Selは、ステージ上のオブジェクトを分離する6つのボタン(各カテゴリの各ボタン)のクリックイベントで変更されます。

したがって、cScr_Selの値に従って、各カテゴリのコンテンツが表示されます。cScr_Selが0の場合、all_array [0] [cCat_Sel]を使用して現在のターゲットにアクセスし、同様に、値1のそれぞれの配列をall_array[1][cCat_Sel]として使用します。

現在のターゲットを移動して表示するために、すべてのトゥイーンアニメーションを含むすべての作業を行いました。ただし、トゥイーンは2番目のmcsセットを表示領域に移動しません。mc.xプロパティにトゥイーンアニメーションを使用して、movein用とmoveout用の2つの関数があります。関連するすべてのクリックイベント。現在のmcを移動してアルファ0を作成する必要があります。それが終了したら、新しい現在のターゲットを移動してアルファ1を作成します。

どういうわけか、これら2つのトゥイーンを1つの関数に組み合わせる必要があります。これは私が立ち往生している部分です。または、これらのmcsを2つの異なるアレイに配置している可能性があり、正しいアプローチではありません。ルートのEnterFrameイベントでcCat_Sel変数とcScr_Sel変数をチェックし、両方のアニメーションを次々に実行することで、簡単に達成できますが、Enter frameはCPUを使いすぎて遅くなり、おそらく好ましくないようです。

誰かの提案やガイダンスを試してみてください。前もって感謝します。私は公式または非公式のプログラミング教育をまったく受けていませんが、stackoverflowの質問と回答、そして時にはgoogleに従って、いくつかのことを読んで試してみることで、物事をうまく機能させています。私の答えのほとんどはスタックオーバーフローから見つけたからです。アップデート:

        function fnSlideInOut(cMc:Object, pMc:Object){
        var HideX:Number =650;
        var ShowX:Number = 0;
        if(cMc != null){
            if(cMc.x != ShowX){
                //cMc.alpha = 1;
                var SlideMcIn:Tween = new Tween(cMc, "x", Strong.easeOut, 650, ShowX, 0.5, true);
                SlideMcIn.addEventListener(TweenEvent.MOTION_FINISH, fnSlideInFinish);
                SlideMcIn.start();
            }
        }
        if(pMc != null){
            if(pMc.x != HideX){
                //pMc.alpha = 1;
                var SlideMcOut:Tween = new Tween(pMc, "x", Strong.easeOut, 0, HideX, 0.5, true);
                SlideMcOut.addEventListener(TweenEvent.MOTION_FINISH, fnSlideOutFinish);
                SlideMcOut.start();
            }
        }

        function fnSlideOutFinish(e:TweenEvent){
            //SlideMcOut.obj.alpha = 0;
            SlideMcOut.removeEventListener(TweenEvent.MOTION_FINISH, fnSlideOutFinish);
            }
        function fnSlideInFinish(e:TweenEvent){
            //SlideMcIn.obj.alpha = 1;
            SlideMcIn.removeEventListener(TweenEvent.MOTION_FINISH, fnSlideInFinish);
            }
    }//End Function
fnSlideInOut(cScr_Sel, pScr_Sel);

上記のコードのあらゆる種類のエラーについて、専門家のコメントをお願いします。これは99回動作しますが、1回はムービークリップが目的地に到達しないか、現在および以前の両方のターゲットが表示され、それも想定されている場所に到達しません。これは、ボタンクリックイベントがすばやく連続して発生した場合にのみ発生します。再度、感謝します

4

1 に答える 1

0

オプションとして、 TweenLiteなどのサードパーティライブラリを使用することもできます。これにより、最初のアニメーションが完了した直後に2番目のアニメーションを簡単に実行できるようになります。

private function startAnimation():void
{
    var mcToHide:MovieClip = all_array[cScr_Sel][cCat_Sel];
    TweenLite.to(mcToHide, 1, {x: HIDDEN_X_POSITION, y:HIDDEN_Y_POSITION, alpha:0, onComplete:finishAnimation});
}

private function finishAnimation():void
{
    var mcToShow:MovieClip = all_array[(cScr_Sel + 1) % 2][cCat_Sel];
    TweenLite.to(mcToShow, 1, {x: VISIBLE_X_POSITION, y:VISIBLE_Y_POSITION, alpha:1});
}

次に、必要に応じて設定しstartAnimation()た後、関連するマウスクリックイベントを呼び出すことができます。cScr_SelcCat_Sel

于 2013-03-07T21:55:59.783 に答える