2


我正在使用 Adob​​e Flash Professional CS5 创建一个网站。
我正在尝试在 for 循环中使用 URLLoader.load(path) 读取文本文件的内容。
路径每次迭代都会改变。
当我从事件处理程序方法跟踪数据时,它只返回最后一个路径的文本文件的内容。
似乎它仅在 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\0001\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”是“C:\inetpub\wwwroot\0005\category.txt”的内容。

我试图更改“onLoaded”方法以返回这样的字符串:

function onLoaded(e:Event):String
{
    return myData.data.toString();
}

这在 for 循环中:

trace(myData.load(new URLRequest(path)));

然后我得到了这个作为我的输出:

未定义
C:\inetpub\wwwroot\0001\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

我还尝试将 for 循环转换为 while 循环,结果相同。
为什么会这样?
如果 URLLoader.load 方法在 for 循环中无法正常工作,而我对此无能为力,是否还有另一种方法可以从文件中读取简单文本,例如 FileStream 之类的?(我是 ActionScript 的新手,来自 C#)

在此先感谢,
弗雷迪。

4

2 回答 2

1

本教程和示例代码涵盖在多个文件中预加载http://manewc.com/2008/09/02/preloading-multiple-image-demo/

您的代码的问题可能是您对所有文件只有一个 URLLoader。您需要为每个文件创建一个新的加载对象。

于 2011-04-23T12:24:55.220 回答
1

您没有给加载器足够的时间来加载文本文件。您的计算机比网络速度快得多,因此可能甚至在加载程序开始加载第一个文件之前,它就被迫加载第二个文件而不是下一个文件,依此类推。最后一个是它唯一有时间加载的。

在开始下一个之前,您必须等到每个都实际完成加载。这在循环中不起作用,您需要将名称放入数组中,然后在其中设置索引,初始化到第一个元素,开始加载然后在 onLoaded 事件中获取文件,增加索引并加载下一个文本文件,直到你完成。

是的,您只能对所有文件使用一个加载器。具有多个加载器的解决方案也可以工作,但不是因为您只使用多个加载器,而是因为它们中的每一个都不会与其他加载器中断。

于 2011-04-23T12:49:03.957 回答