0

我正在用闪存写一张电子贺卡,我想在用户按下按钮后对一系列动画进行排序。第一个是在 MovieClip displayScreen_mc 的第 2-60 行播放的补间形状。第二个是我编写的名为 TypeWriter 的单独类中的一个函数,它在 TLFTextField 上一次写入一个字母。(该代码运行良好。)

问题:我想遍历一个字符串数组。在每次迭代中,我想 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);
}

这些都写在我舞台上的Actions层的actionscript中。TypeWriter 是一个包含 writeText 函数的单独类。我希望 displayStatic 在调用 tw.textWrite 之前完成。我想将 gotoAndPlay 保留在一个函数中,因为将来我可能想在那里添加一些东西。

我一直在尝试使用 addEventListener 在调用第二个函数之前等待第一个函数完成。有人有解决方案吗?

4

2 回答 2

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 回答
0

在 displayScreen_mc tween 的最后一帧,调度一个事件,例如“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 回答