2012-07-25 109 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