Использование URLLoader.загрузка внутри цикла for

#actionscript-3 #for-loop #while-loop #flash-cs5 #urlloader

#actionscript-3 #for-цикл #цикл while #flash-cs5 #urlloader

Вопрос:

Я создаю веб-сайт с использованием Adobe Flash Professional CS5.
Я пытаюсь прочитать содержимое текстового файла с помощью URLLoader.load (путь) внутри цикла for.
Путь меняется на каждой итерации.
Когда я отслеживаю данные из метода обработчика событий, он возвращает только содержимое текстового файла последнего пути.
Похоже, что он вызывает метод обработчика событий только после завершения цикла 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:inetpubwwwroot001category.txt
C:inetpubwwwroot002category.txt
C:inetpubwwwroot003category.txt
C:inetpubwwwroot004category.txt
C:inetpubwwwroot005category.txt
Ювелирный

Как я уже сказал, «Jewlery» — это содержимое «C:inetpubwwwroot005category.txt «.

Я попытался изменить метод «OnLoaded», чтобы возвращать строку, подобную этой:

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

Это внутри цикла for:

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

Затем я получил это в качестве своего вывода:

не определено
C:inetpubwwwroot001category.txt
не определено
C:inetpubwwwroot002category.txt
не определено
C:inetpubwwwroot003category.txt
не определено
C:inetpubwwwroot004category.txt
не определено
C:inetpubwwwroot005category.txt

Я также попытался преобразовать цикл for в цикл while, тот же результат.
Почему это так действует?
Если URLLoader.метод load плохо работает внутри цикла for, и я ничего не могу с этим поделать, есть ли другой способ прочитать простой текст из файлов, например FileStream или что-то в этом роде? (Я новичок в ActionScript, пришел с C #)

Заранее спасибо,
Фредди.

Ответ №1:

Вы не даете своему загрузчику достаточно времени для загрузки ваших текстовых файлов. Скорость вашего компьютера намного превышает скорость сети, поэтому, вероятно, даже до того, как загрузчик начнет загружать первый файл, он вынужден загружать второй, а не следующий, и так далее для. И последний — единственный, который он успевает загрузить.

Вам придется подождать, пока загрузка каждого из них фактически не завершится, прежде чем запускать следующий. В цикле это не сработает, вам нужно поместить имя в массив, затем настроить в нем индекс, инициализироваться первым элементом, начать загрузку, затем в событии OnLoaded получить нужный файл, увеличить индекс и перейти к загрузке следующего текстового файла, пока вы не закончите.

И да, вы можете использовать только один загрузчик для всех ваших файлов. Решение с несколькими загрузчиками также будет работать, но не потому, что вы просто используете несколько загрузчиков, а опять же потому, что каждый из них не будет прерываться другим.

Комментарии:

1. Теперь это действительно имеет смысл. : D Теперь я понимаю, почему я получил только содержимое последнего пути, хотя загрузчик создает новый экземпляр URLLoader на каждой итерации. Спасибо, что прояснили ситуацию 😉 Я попытаюсь это сделать, я предполагаю, что это решит другую проблему, которая у меня есть сейчас.. Команды после цикла for (который вызывает функцию loader) выполняются до завершения события. Вероятно, из-за упомянутой вами проблемы с синхронизацией. ЕЩЕ раз спасибо!

Ответ №2:

В этом руководстве и примере кода рассматривается предварительная загрузка в несколько файлов http://manewc.com/2008/09/02/preloading-multiple-image-demo /

Проблема с вашим кодом, возможно, в том, что у вас есть только один URLLoader для всех файлов. Вам нужно создать новый объект load для каждого файла.

Комментарии:

1. Спасибо! Я создал новый метод, который получает путь, создает новый экземпляр URLLoader и загружает текстовый файл оттуда. ЭТО РАБОТАЕТ! 🙂