2012-07-25 104 views
0

我是新來的AS,我試圖管理一些問題。動作腳本3.0插入延遲

我遇到下一個腳本

var t:Date = new Date(); 
var day=t.getDate(); 
var month=t.getMonth()+1; 
var today=day+"."+month; 
var u:Number = 0; 

var b_persons:Array = new Array(); 

var loader:URLLoader = new URLLoader(new URLRequest("bday.xml")); 
var bday_file:XML = new XML(); 

loader.addEventListener(Event.COMPLETE, endLoad); 


function endLoad(all_data:Event) 

{ 
    bday_file = XML(all_data.target.data); 

    for each (var person:XML in bday_file.Person) 
    { 
     if (person.BD == today) 
     { 
      b_persons.push(person.FIO); 

      trace (b_persons.length); 
     } 
    } 
} 

function assign_txtBdayPerson() 
{ 
    txtBdayPerson.text=b_persons[u]; 
    trace(b_persons[u]); 
    u=u+1; 
    if (u >= b_persons.length) 
    {clearInterval(delay_assign_txtBdayPerson);} 

} 

trace ("Test"+b_persons.length); 

if (b_persons.length != 0) 
    { 
     var delay_assign_txtBdayPerson = setInterval(assign_txtBdayPerson,3000); 
    } 

我的XML文件中有2種適當的條件下,輸出窗口顯示我的下一個序列

測試0比1和最後2

所以看起來好像是

trace ("Test"+b_persons.length); 

function endLoad(all_data:Event) 

完成

你能幫幫我嗎?

回答

0

發生這種情況,因爲trace ("Test"+b_persons.length);在實際加載開始時在相同的「框架」中執行。 endLoad()回調至少在下一幀中執行,當XML已經被加載時。這就是Flash中異步流的本質。

1

如果您希望/需要trace ("Test"+b_persons.length);在加載並解析XML之後運行,您需要將它放在endload中或endload將在其函數結尾調用的函數中。

如果你不習慣他們,事件可能看起來不同而且邪惡,但一旦你習慣了他們,你會發現他們會更好地合作。

+0

感謝您的回覆,我按照您的說法使用了多種功能並正確放置了這些功能=) 事件真是有趣的事情......有沒有像「onfunction comleted」這樣的事件?只是有興趣=) – user1551451 2012-07-25 15:19:09

+1

不,但你可以派遣自己的自定義事件。 'dispatchEvent(new Event(「SomeFunctionFinished」));'在函數結尾處。只要確保你正在頂端addEventListner(「SomeFunctionFinished」,_funcToCallWhenFinished')聽到該事件,但它只是更容易調用該函數。 – WORMSS 2012-07-26 08:30:46

+0

謝謝,我已經做了別的事情,但一切都新的很好對我來說=) – user1551451 2012-08-05 14:57:17