![]() |
Загрузка изображений. Грузит только последнее.
Добрый день! Я делаю фотогалерею, которая потгружает в себя внешние изображения. Потгрузив, BitmapData перерисовывает их и Matrix уменьшает, тем самым создавая превью. Но вот почему-то, у меня загружается только последнее изображение!
Код:
import flash.display.BitmapData; |
1) for()...loop - убрать.
2) Загнать название фоток в массив. 3) В теле функции Инита шагаем по массиву и грузим одну фотку, проверяя не в конце ли массива мы находимся - что бы опять не вызвать loadClip(...). Т.е. в начале мы loadClip(...), что бы сработал Init. Сжатый пример: Код:
... |
И чему по-Вашему равен [imgContPath], когда цикл уже отработал (это же доли секунды), а загрузка только началась? Последнему, конечно. Он и отрисовывается в битмапдату.
|
Джонатан!
Начнем. Давайте рассмотрим вот эту строчку: Код:
bmd.draw(photo_mc[imgContPath], mtrx);издеваться над мувами, которые уже на самом деле подгружены, т.е.: Код:
mclList.onLoadInit = function(target_mc:MovieClip) {} |
Ну и запутали вы меня, товарищи! Итак:
Molecula, загнать названия фоток в массив я немогу, т.к. я делаю универсальную фотогалерею. Фотки будут часто меняться, и их колличество тоже будет всегда разным. Поэтому я и сделал что-бы пременная all грузилась из блокнота. В нем владелец будет задавать число равное колличеству фоток которые нужно будет загрузить. Wolsh, да, действительно, это именно так. Alex_beginner, неа. Не в этом. А если я for заменю onEnterFrame и вставлю флаг, чтобы загрузка юыла строго последовательной, будет работать? |
Честно говоря как-то не разумно, что клиент будет сливать ТХТ файл, менять там цифру, потом заливать.
А исходя из этой срочки: Код:
var imgPath = "img/img" + q + ".jpg";Лечге было показать, как в ХМЛь забивать названия файлов да и всё - ну это уже дело хозяйское. onEnterFrame - вообще загубит дело. Ну, раз у Вас есть общее кол-во фоток то: Код:
... |
А какая разница? Перезаливать TXT или XML
Так а bmd.draw будет перерисовывать загруженное изображение где? И что такое 'extension' ??? |
Цитата:
|
Вложений: 1
Цитата:
Цитата:
Цитата:
Цитата:
Правда проблему с prevContPath это не снимает. Теперь, вероятно привьюшки у Вас все одинаковые, т.е тоже какбы видна последняя картинка? Если так (а это так), создавайте битмапдату каждый раз, когда хотите отрендерить в нее подгруженное в мувиклип изображение. Структура приложения плохо согласуется с целями проекта. Почти везде осутствует типизация переменных. Вообщем, я думаю, лучше все это переделать. Попробовал исправить некторые ошибки до работоспособности кода, втиснув свои исправления в созданную Вами структуру (см.вложение). Получилось отвратительно. |
Alex_beginner, вы как-то раз нетак давно выкладывали исходник, на похожую тему. Назывался файл "Последовательная загрузка изображений (created_by_Alex_beginner)" Так вот я сейчас решил по нему сделать свою задачу. Все получилось, но с загрузкой каждой новой фотки, битмапа тоже перерисовывается в неё, как вы и описали выше. Сейчас гляну что Вы прикрепили на этот раз...
|
Только почему-то битмап не дорисовывает последнюю картинку...
Код:
import flash.display.BitmapData; |
Отвлечемся на секунду от того, как программа получает список файлов. Это можно изменить и потом, все обдумав и обсудив с заказчиком.
Послушайте, джонатан, все операции с загруженными картинками можно проводить только после загрузки. Обратите внимание, что метод onLoadInit имеет ссылку на загруженное изображение (клип, который теперь это изображение). Т.е. в коде Код:
mclLst.onLoadInit = function(_mc) {pS Уважаю мнение коллег, но последовательная загрузка вовсе не является обязательным условием. Один лоадер прекрасно грузит сотню картинок одновременно, и для каждой произойдет событие и будет получена ссылка на клип. А уж дальше все в наших руках)))) |
Вложений: 1
Джонатан! Вот второй вариант последовательной загрузки изображений без onEnterFrame (на мой взгляд эффективнее) - см.вложение, если понадобиться.
Последовательная загрузка может понадобиться в случае когда Вам необходимо во чтобы то ни стало загрузить какое-либо изображение первым, вторым,..., независимо от его размера (в байтах). Т.е. порядок срабатывания onLoadInit будет зависить непосредственно от порядка загрузки, установоленного разрабочиком, а не от размера загружаемых изображений. |
Alex_beginner, спасибо за предыдущий исходник! Все заработало! За этот тоже спасибо, полюбому пригодится.
Единственный недостаток, в том, что картины грузятся и размещаются в еврейском порядке (справа на лево), но уж это я думаю сам решу. Wolsh, да! Спасибо, я уже понял. Просто раньше не знал что это такое. Теперь буду знать. Всем спасибо, огромнейшее! Незнаю, что бы я делал без вашей доброты, понимания, и отзывчивости! //UPDATE Факинг шит! Не сказать, что хорошо, что MCL грузит фотки в разнобой, мне же надо чтобы когда жмякнешь на превью (bmd) показывалась фотка, соответствующая картинке на превью. А у меня получаеьтся когда я перевожу в битмап, фотки распологаются в разброс, а нумеруются по порядку... Никто не подскажет, как с этим быть? |
Чтож, продолжаем курс)))
Хотя я не понял, почему в разнобой, если загрузка последовательная. Или она не последовательная?)))) Я под последовательной понимаю что пока первая картинка не загрузилась, загрузка второй не начинается. Если так, то откуда разнобой? Теперь о структурировании хаоса. Если бы Вы порылись для начала в том, что здесь выкладывают товарищи на эту тему, то заметили бы одну характерную деталь. Для загрузки картинки создается некий контейнер - пустой клип. В этом контейнере создается еще один пустой клип, в который собственно и грузится картинка. Зачем? Затем, что клип, в который будет загружаться картинка, не способен сохранить присвоенные ему свойства - после загрузки они исчезнут. Но его контейнер может. Поэтому в цикле или рекурсии, где Вы запускаете загрузки, Вы сохраняете в свойстве контейнера некий идентификатор, допустим итератор цикла или другой каунтер. И тогда контейнер картинки будет хранить этот ID, и после загрузки Вы можете узнать его через mc._parent.ID. Естественно, таким же образом в свойствах контейнера Вы можете сохранить ссылку на большое изображение и все прочие данные, связанные с этим изображением. Посмотрите, например, тут http://www.flasher.ru/forum/showthread.php?t=112985 |
Джонатан! Давайте поступим так. Вы полностью изложите что бы Вы хотели реализовать, в деталях желательно, а мы, в свою очередь попытаемся это воплотить в жизнь. А уж потом, развернем дискуссию на тему: "Ошибки кода, загрузки изображений (клипов)..., работа с BitmapData". Если Вы согласны дайте нам знать, письменно изобразив, то что Вы хотели бы реализовать. Дело в том, что мы знаем только поверхностные черты Вашего проекта, и поэтому, приходиться использовать наводящие вопросы, реплики и даже исходники, но пока безрезультатно. Давайте будем конструктивнее в нашей с Вами работе.
|
Вложений: 1
Alex_beginner, я думаю это лишнее. Я уже добился того, его хотел. И у меня осталсь один очень странный баг. Причем он настолько странный, что просто я в шоке. Короче. Еще раз низкий поклон вам. Я взял ваш вчерашний исходник (Последовательная загрузка изображений (created_by_Alex_beginner,v2).rar) и переделал его под свои нужды. Так вот, все вроде бы как отлично работает, но есть одно но! Я думаю объяснять буде никчему, лучше увидьте её. А как работает флешка я счас объясню:
Создаются клипы: mc + i dmc + i [mc + i]fotoCountainer Создаются 2 объекта класса BitmapData 1.bmd 2.bmd2 В [mc + i]fotoCountainer загружаются фотки, и срабатывает onLoadInit. Он делает mc + i.alpha = 0. Битмап даты перерисовывают их. bmd перерисовав помещает в dmc+i, а bmd в mc + i. После этого [mc + i]fotoCountainer удаляется. Получается, что битмапы, лежащие в mc+i сразу не видны, а видны только их копии размещенные в dmc+i. Но если нажать на однин из dmc+i то mc+i становится _alpha 100. Так вот, если клацать по 8ой - 30ой фотке, то все работает прекрасно, но если по 1-7 то не появляются. Но как только флешку чуть растянешь (сам плеер) то фотка появляеится. Бред какой-то. Смотрите. (флешку тянуть не получится, можно сменить размер окна броузера, тогда тоже появится) Креплю исходник. Может кто знает чт это такое??? |
Хех!:D Любопытный сайт у Вас получился.:) Да, странноватый эффект - при ресайзе браузера картинка появляется. А Вы не пробовали картинки менять (другие форматы)?
Просьба, выложите файл в формате Flash8 (у меня нет CS3, sorry). |
Вот в этом куске
Код:
this[qqq].onRelease = function() {_________ UPD: А у меня всё появляется, во флэше. |
Wolsh, он равен mc+(номер клипа по которому клацнул.)
Нееее... Тут все ок. Я правда счас уже переделал. Короче, всеравно проблема непонятна, но как избежать её я придумал. Вобщем. Кто смотрел, получается у меня верхние картинки все расположены в одном и том же месте, а нижние на расстоянии друг от друга. Так вот, (у меня в коде закоменчено) я сделал чтобы и верхние тоже так-же распологались не в одном и том-же месте, и все стало работать. Как я понял, видимо глюк был, с Глубиной клипов, но почему только в первых 8-ми, я непонял. Но конечно это тоже не выход, т.к. я буду переносить этот код в свою галлерею, и там, мне нужно чтобы основные фотки стояли в одно и том-же месте... //UPDATE Все! Сделал! Действительно проблемы была c глубинами. Почему глючит я так и не понял, от глюга избавился. Я сделал, чтобы после того как клип становится _alpha = 0, еще вдобавок прописал _visible = false; Ну а потом когда по нему жмешь, _visible = true, и альфа 100 через Tween. Все заработало! Спасибо всем кто старался мне помочь, очень приятно, что уже никто не посылает меня в хелп а реально старается помочь. Особенное спасибо Alex_beginner`у за мега активное участие в решении моей проблемы, и Wolsh`за четкие объяснения многих вещей. |
Рад что всё получилось. Однако жаль выбросить потраченный час, поэтому я всеже представлю свой вариант.
Код:
Stage.scaleMode = "noScale"; |
Вложений: 1
Джонатан! Прошу меня извинить за задержку в предоставлении обещанного мной приложения (не смог выйдти на связь по личным причинам). Если тема еще актуальна, хочу аддитивно к вариантам коллег представить свой вариант реализации Вашего проекта.
Код:
//////////////////////////////////////////////////////////////////////////////////////////////////Его преимущества: 1. Независимые друг от друга загрузки изображений (параллельная загрузка), в связи с чем, загрузка осуществляется быстро; 2. Несмотря на параллельную загрузку изображений вывод их превью-аналогов в превью-область производится последовательно слева-направо и сверху вниз, а не хаотично, в зависимости от размера изображения; 3. Вы имеете возможность работать с уже загруженными изображениями пока другие грузятся; 4. Размер превью-изображений и полномасштабных изображений не зависит от геометрических размеров загружаемых изображений, т.е. изображения любых размеров "втиснутся" в области просмотра; 5. Легкость настройки и управления; 6. Относительная простота и структурированность кода. Это улучшает его читабельность и облегчает работу с кодом по его оптимизации и рефакторингу. Недостатки: 1. Код носит базовый, не законченный характер, т.е. отсутствует код обуславливающий дизайнерские аспекты, такие как твиннинг, обрамление превью-изображений при клике на них, итд. 2. Визуализация превью-изображений хоть и происходит последовательно, но рывками в зависимости от размеров изображений. Обязательно тестите приложение в режиме моделирования загрузки - увидите в чем разница между этим приложением и обычным загрузчиком. Надеюсь код поможет. Удачи! |
| Часовой пояс GMT +4, время: 07:43. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.