|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Wolsh, аа вот оно что, а я думал глаголы в камментах этого форума )))
Ок, учтём. |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Оппа. А эта программа (как оказалось) работает не правильно.
Она три раза подряд выдает третье изображение. Я даже подозреваю, что все три элемента массива содержат третье изображение. Опять какие-то мутно-уловимые асинхронные штуковины? Прошу помощи в нахождении бага. Или может быть, всё надо переделывать с нуля. Не знаю точно как, может быть сначала создать массив URLRequest значений, и цикл другого типа юзать. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А чего Вы ждали, у Вас же один Лоадер сохраняется в приватной переменной, последний из создаваемых в цикле. Или Вы думали, что одна переменная будет хранить все три Лоадера в себе?))
Соответственно в обработчике Вы у этого последнего Лоадера и забираете то что он загрузил, независимо от того, какой Лоадер на самом деле послал событие COMPLETE: А надо и приватная ссылка вобщем-то не нужна.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Wolsh, благодарю за багфикс, теперь все три картинки выводятся.
Цитата:
Рассмотрим по итерациям. 1. i = 0, Создаем экземпляр imageLoader, Грузим в него "text1.png", Запускаем слушатель. 2. Выходим из цикла for. В переменную BitData записываем картинку text1.png, Перекидываем ее в BitItem. 3. Засовываем его в PicArray[0], Наращиваем переменную индекса массива. 4. Возвращаемся в цикл for, получаем i = 1, повторяем. Я же успел значение text1.png засунуть в массив! И при следующей итерации, то же должно произойти с text2.png... Цитата:
Цитата:
Я предполагал, что либо этот выход происходит каждый раз, и я успеваю засунуть значение в массив. Либо же, как-то асинхронно запустяццо три слушателя, и каждый (уже сложнее представить такое, лол) как-то разрулит ситуацию сам, ведь он успел получить соответствующую ему строку. Цитата:
Однако почему она не равнозначна той записи (по указанным выше моментам), не очень понятно. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
Учите основы. Читайте главы про событийную модель. Если нужно, пейте кофе. Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Вот оно как, картина начинает проясняться.
Хотя некоторые сомнения всё-таки остаются. Например, если сборщик мусора сжирает первые две инициации initListener, тогда, вроде как и эта строка не должна помогать, потому что двое первых e.currentTarget.content уже были "сожраны лангоньерами". Впрочем, не хочу отвлекать вас лишний раз, нужно перечитывать главу Мука про события. Тем более, что кофе пока вне доступа, да к тому же еще и понедельник : ) Хотелось бы, разве что, обратить внимание на вот этот фрагмент: Цитата:
нужно заменить на введение локальной переменной цикла: for(var i:uint = 0; i < 3; i ++ ) { var imageLoader:Loader; //добавлено imageLoader = new Loader(); imageLoader.load( new URLRequest("text" + String(i + 1) + ".png" ) ); imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, initListener); } И можно отметить интересный ньюанс: В изначальном варианте, порядок вывода картинок такой: Вторая, Третья, Первая. (похоже, это зависит от размеров файлов: 39Кб, 34Кб, 31Кб) В исправленном варианте, порядок вывода картинок такой: Третья, Первая, Вторая. (здесь принцип непонятен). |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А порядка и не будет, тем более с такой маленькой разницей в весе. Там слишком много факторов влияют, особенно в сети (да и при чтении с диска есть моменты))). Если важен порядок, надо использовать последовательную, а не параллельную загрузку (то есть грузить в один лоадер, каждую следующую загрузку начинать только после завершения предыдущей).
Локальная переменная — да, я имел в виду ее. Обратите внимание, ссылка опять вроде бы нигде не сохраняется. Возможно, у работающих Лоадеров просто иммунитет — честно, не задавался этим вопросом.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
У Мука в книге кстати был не Event.Complete, а Event.Init, там правда один файл грузился.
Может имунны лоадеры у которых комплит, а у которых инит нет, но это надо отдельно смотреть. Ок, понятно. Заносим "последовательная загрузка" в ToDo List. |
|
|||||
Регистрация: Aug 2013
Сообщений: 56
|
Цитата:
>Цикл отработал initListener == ссылке на последний лоадер. Загрузки начались. >>... прошел некий отрезок времени >Файлы загрузились. Цитата:
Порядок не зависит от размера файла, кто первый загрузился того и тапки. Конечно первый чаще загружается самый маленький, но при таком маленьком разбросе в размерах, как у вас, это может быть какой угодно файл. P.S. Про порядок вижу вам уже ответили пока я пост писал. P.P.S. Если по хорошему, то в вашем случае глобальная переменная класса нужна только одна - массив со ссылками на загруженные картинки. (у вас PicArray) |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Котейка, извиняюсь что туплю, но главу Мука я еще не перечитывал, поэтому...
Цитата:
Ведь currentTarget.content всегда равен ссылке на последний лоадер, и всё равно должна только третья картинка отображаться : ) Как же тогда currentTarget получает различные значения? Цитата:
Хотя, что это меняет, в чем заключается "по хорошему" при такой реализации, не очень понятно. |
Часовой пояс GMT +4, время: 06:59. |
|
« Предыдущая тема | Следующая тема » |
Теги |
array , loader as3 , загрузка , Изображения , массив |
|
|