0

私はフラッシュで eCard を書いています。ユーザーがボタンを押した後に一連のアニメーションをシーケンスしたいと考えています。1 つ目は、MovieClip displayScreen_mc の 2 ~ 60 行で再生されるシェイプ トゥイーンです。2 つ目は、私が作成した TypeWriter という別のクラスの関数で、TLFTextField に一度に 1 文字ずつ文字列を書き込みます。(そのコードは完全に機能しています。)

問題: 文字列配列を反復処理したい。反復ごとに gotoAndPlay を実行し、次に TypeWriter を使用して文字列を書き出します。私が持っているコードは次のとおりです。

var greetings:Array = new Array( "string 1, string2, string3, etc " );

//Onclick functiont to start sequence of events..
function displayInvitation(event:MouseEvent):void
{
    var tw = new TypeWriter();
    var index:int = 0;
    while ( index < greetings.length )
    {
        displayStatic(); 
        tw.writeText(greetings[index], 100, displayScreen_mc.displayText);
        index++;
    }
}

function displayStatic():void
{
    displayScreen_mc.gotoAndPlay(2);
}

これらはすべて、ステージ上のアクション レイヤーのアクション スクリプトに記述されています。TypeWriter は、writeText 関数を含む別のクラスです。tw.textWrite が呼び出される前に、displayStatic を終了させたい。gotoAndPlay を関数内に保持したいのは、将来そこに何かを追加したいかもしれないからです。

addEventListener を使用して、最初の関数の完了を待ってから 2 番目の関数を呼び出そうとしています。誰にも解決策がありますか?

4

2 に答える 2

0

displayScreen_mc トゥイーンの最後のフレームで、「animationEnd」などのイベントをディスパッチし、イベントをリッスンして textWrite 関数を開始します。コード内:

最後のフレームの displayScreen_mc 内:

dispatchEvent(new Event("animationEnd"));

メインステージで:

displayScreen_mc.addEventListener("animationEnd", writeText);
function writeText(e:Event):void{
    tw.textWrite(/*arguments*/);
}
于 2012-10-15T06:18:13.473 に答える
0

コードに ENTER_FRAME リスナーを導入し、続行する前に特定の条件が完了するかどうかをテストする必要があるようです。この例があなたが望んでいることを正確に行うかどうかはわかりません (他の参加者が何をするかを伝えるのは難しいです)。

例えば。

var greetings = [ "..." ];
var index:int;
var tw:TypeWriter;

function displayInvitation(event:MouseEvent):void
{
    index = 0;
    tw = new TypeWriter();
    addEventListener( Event.ENTER_FRAME, onProcessEnterFrame );
}


function onProcessEnterFrame(e:Event):void
{
    if( index < greetings.length )
    {
        if( displayScreen_mc.currentFrame == displayScreen_mc.totalFrames )
        {
            displayStatic();
            tw.writeText(greetings[index], 100, displayScreen_mc.displayText);
            index++;
        }
    }
    else
    {
         removeEventListener( Event.ENTER_FRAME, onProcessEnterFrame );
         // greetings displayed
    }
}
于 2012-10-15T05:37:00.153 に答える