2012-10-15 82 views
0

我在閃存中編寫eCard,並且我想在用戶按下按鈕之後對一系列動畫進行排序。第一種是在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

看來你需要在你的代碼中引入一個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 
    } 
} 
+0

嗯。不完全是。 displayScreen_mc是一個影片剪輯,它在第2-60幀有一個補間形狀,並且它有一個名爲displayText的TLFTextField。 線 'tw.writeText(問候[指數],100,displayScreen_mc.displayText);' 可以與取代: 'displayScreen_mc.dislayText.text =問候[指數];' –

+0

但我想要做,直到displayScreen_mc達到第60幀後纔會延遲'tw.writeText()'。但是,如果可能的話,我想讓它不那麼明確,然後是ENTER_FRAME。就像一個Event.COMPLETE eventListener。我也是一個完整的Flash新手,所以請原諒我的想法是否有缺陷.. –

0

在displayScreen_mc補間的最後一幀,分派事件,如「animationEnd」,並聆聽開始你textWrite函數的事件。在代碼:

內displayScreen_mc最後一幀:

dispatchEvent(new Event("animationEnd")); 

在你的主要階段:

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

嗯。出於某種原因,補間和寫文本都同時啓動... –

+0

@Logan危險黑你更新了你的代碼?如果是這樣,請您發帖嗎? –

相關問題