在调用另一个之前等待函数/补间完成

时间:2012-10-15 05:00:47

标签: actionscript-3 flash

我正在写一个闪存中的电子贺卡,我想在用户按下按钮后对一系列动画进行排序。第一个是在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);
}

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

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

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

在displayScreen_mc补间的最后一帧,调度诸如“animationEnd”之类的事件并侦听事件以启动textWrite函数。在代码中:

最后一帧内的displayScreen_mc:

dispatchEvent(new Event("animationEnd"));

在你的主舞台上:

displayScreen_mc.addEventListener("animationEnd", writeText);
function writeText(e:Event):void{
    tw.textWrite(/*arguments*/);
}