我正在使用Adobe Flash Professional CS5创建一个网站。
我正在尝试在for循环中使用URLLoader.load(路径(读取文本文件的内容
路径每次迭代都会更改
当我从事件处理程序方法跟踪数据时,它只返回最后一个路径的文本文件的内容
它似乎只是在for完成循环之后才调用事件处理程序方法。
代码:
var myData:URLLoader = new URLLoader();
myData.addEventListener(Event.COMPLETE, onLoaded);
function onLoaded(e:Event):void
{
trace(myData.data);
}
for (var o = 0; o < filesArray.length; o++)
{
for (var p = 0; p < filesArray[o].length; p++)
{
if (filesArray[o][p] == "category.txt")
{
path = "C:\inetpub\wwwroot\" + filesArray[o][0] + "\" + filesArray[o][p];
myData.load(new URLRequest(path));
trace(path);
}
}
}
这是输出:
C: \inetpub\wwwroot\00001\category.txt
C: \inetpub\wwwroot\0002\category.txt
C: \inetpub\wwwroot\0003\category.txt
C: \inetpub\wwwroot\0004\category.txt
C: \inetpub\wwwroot\0005\category.txt
Jewlery
正如我所说,"Jewlery"是"C:\inetpub\wwwroot\005\category.txt"的内容。
我试图更改"onLoaded"方法以返回这样的字符串:
function onLoaded(e:Event):String
{
return myData.data.toString();
}
这在for循环中:
trace(myData.load(new URLRequest(path)));
然后我得到了这个作为我的输出:
未定义
C: \inetpub\wwwroot\00001\category.txt
未定义
C: \inetpub\wwwroot\0002\category.txt
未定义
C: \inetpub\wwwroot\0003\category.txt
未定义
C: \inetpub\wwwroot\0004\category.txt
未定义
C: \inetpub\wwwroot\005\category.txt
我还尝试将for循环转换为while循环,结果相同
为什么它会这样
如果URLLoader.load方法在for循环中不能很好地工作,而我对此无能为力,那么有没有其他方法可以从文件中读取简单的文本,比如FileStream之类的?(我是ActionScript的新手,来自C#(
提前感谢,
弗雷迪。
您没有给加载程序足够的时间来加载文本文件。你的计算机比网络速度快得多,所以可能在加载程序开始加载第一个文件之前,它就被迫加载第二个文件,而不是下一个文件,以此类推。最后一个是它唯一有时间加载的。
在开始下一个加载之前,您必须等到每个加载完成。这在循环中不起作用,您需要将名称放入数组中,然后在其中设置索引,初始化为第一个元素,开始加载,然后在onLoaded事件中获取文件,增加索引,然后加载下一个文本文件,直到完成。
是的,你只能对所有文件使用一个加载程序。具有多个加载器的解决方案也会起作用,但这并不是因为您只使用了多个加载器,而是因为它们中的每一个都不会与其他加载器中断。
本教程和示例代码涵盖了在多个文件中预加载http://manewc.com/2008/09/02/preloading-multiple-image-demo/
代码的问题可能是所有文件只有一个URLLoader。您需要为每个文件创建一个新的加载对象。