我正在写一个闪存中的电子贺卡,我想在用户按下按钮后对一系列动画进行排序。第一个是在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在调用第二个函数之前等待完成第一个函数。有人有解决方案吗?
答案 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*/);
}