我是AS的新手,我试图解决一些问题。
我有下一个脚本
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文件有两个合适的条件,输出窗口显示下一个序列
测试0比1和最后2
所以似乎
trace ("Test"+b_persons.length);
早于
运行function endLoad(all_data:Event)
已完成
你可以帮我吗?答案 0 :(得分:1)
如果你想要/ {need} trace ("Test"+b_persons.length);
在XML加载并被解析之后运行,你需要将它放在endload中或者在endload将在其函数结束时调用的函数内。 / p>
如果你不熟悉它们,事件可能看起来不同而且很邪恶,但是一旦你习惯了它们,你就会发现它们更适合工作。
答案 1 :(得分:0)
它发生了,因为trace ("Test"+b_persons.length);
在实际加载开始的同一“帧”中执行。当XML已经加载时,至少在下一帧中执行endLoad()
回调。这就是Flash中异步流程的本质。