![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Добрый день! Я делаю фотогалерею, которая потгружает в себя внешние изображения. Потгрузив, BitmapData перерисовывает их и Matrix уменьшает, тем самым создавая превью. Но вот почему-то, у меня загружается только последнее изображение!
import flash.display.BitmapData;
import flash.geom.Matrix;
import mx.transitions.Tween;
var mcl = new MovieClipLoader();
var mclLst = new Object();
var mtrx = new Matrix();
var bmd = new BitmapData(100, 75, true, 0x00000000);
mtrx.scale(0.15625, 0.15625);
mclLst.onLoadInit = function() {
bmd.draw(photo_mc[imgContPath], mtrx);
preview_mc[prevContPath].attachBitmap(bmd, this.getNextHighestDepth(), "auto", true);
trace(prevContPath + " загружен");
}
// Слушатель MovieClipLoader'a
mcl.addListener(mclLst);
//Грузим картинку:
// all это переменная потгружаемая из внешнего TXT в котором задается колл-во изображений, которые надо потгрузить:
for (var q = 0; q < all; q++) {
var imgPath = "img/img" + q + ".jpg";
var imgContPath = "photo_cont" + q;
var backImgContPath = "photo_cont" + (q-1);
var prevContPath = "preview_cont" + q;
var backPrevContPath = "preview_cont" + (q-1);
//Создаю контейнеры для фотографий и превью:
photo_mc.createEmptyMovieClip(imgContPath, this.getNextHighestDepth());
preview_mc.createEmptyMovieClip(prevContPath, this.getNextHighestDepth());
if( q <= 0) {
photo_mc[imgContPath]._x = 0;
} else {
photo_mc[imgContPath]._x = preview_mc[backImgContPath]._x + 108;
}
mcl.loadClip(imgPath, photo_mc[imgContPath]);
}
__________________
Убейте меня! |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
1) for()...loop - убрать.
2) Загнать название фоток в массив. 3) В теле функции Инита шагаем по массиву и грузим одну фотку, проверяя не в конце ли массива мы находимся - что бы опять не вызвать loadClip(...). Т.е. в начале мы loadClip(...), что бы сработал Init. Сжатый пример: ...
var counter:Number = 0;// наш счетчик, который показывает, сколько раз мы загрузили фоток из массива.
var arr:Array = [];
...
onLoadInit = function() {
this.counter++;
if(this.counter<this.arr.length){
loadClip(myMc, this.arr[this.counter]);
}
else trace('We finished');
}
loadClip(myMc, this.arr[this.counter]);
__________________
john Последний раз редактировалось Molecula; 30.07.2008 в 16:44. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
И чему по-Вашему равен [imgContPath], когда цикл уже отработал (это же доли секунды), а загрузка только началась? Последнему, конечно. Он и отрисовывается в битмапдату.
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Джонатан!
Начнем. Давайте рассмотрим вот эту строчку: Какие мысли она навивает?! Почему, Вы решили, что первым обязательно загрузится картинка, которую первой Вы поставили в loadClip. Первой, скорее всего, загрузится наименьшая по размеру картинка. Поэтому, предлагаю издеваться над мувами, которые уже на самом деле подгружены, т.е.: И вот тогда, target_mc будет реально загруженный клипик. Ну, я так думаю. Мож в этом дело.
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
|
Ну и запутали вы меня, товарищи! Итак:
Molecula, загнать названия фоток в массив я немогу, т.к. я делаю универсальную фотогалерею. Фотки будут часто меняться, и их колличество тоже будет всегда разным. Поэтому я и сделал что-бы пременная all грузилась из блокнота. В нем владелец будет задавать число равное колличеству фоток которые нужно будет загрузить. Wolsh, да, действительно, это именно так. Alex_beginner, неа. Не в этом. А если я for заменю onEnterFrame и вставлю флаг, чтобы загрузка юыла строго последовательной, будет работать?
__________________
Убейте меня! Последний раз редактировалось джонатан; 30.07.2008 в 16:26. |
|
|||||
|
Регистрация: Apr 2007
Сообщений: 1,369
|
Честно говоря как-то не разумно, что клиент будет сливать ТХТ файл, менять там цифру, потом заливать.
А исходя из этой срочки: Ещё и переименовывать их численно. Лечге было показать, как в ХМЛь забивать названия файлов да и всё - ну это уже дело хозяйское. onEnterFrame - вообще загубит дело. Ну, раз у Вас есть общее кол-во фоток то: ...
var counter:Number = 0;// наш счетчик, который показывает, сколько раз мы загрузили фоток из массива.
var globalAmountOfPhotos:Number = 144; // например
...
onLoadInit = function() {
this.counter++;
if(this.counter < globalAmountOfPhotos){
loadClip(myMc, this.counter);
}
else trace('We finished');
}
loadClip(myMc, 'your_path'+this.counter+'extension');
__________________
john Последний раз редактировалось Molecula; 30.07.2008 в 16:45. |
|
|||||
|
А какая разница? Перезаливать TXT или XML
Так а bmd.draw будет перерисовывать загруженное изображение где? И что такое 'extension' ???
__________________
Убейте меня! Последний раз редактировалось джонатан; 30.07.2008 в 17:14. |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Цитата:
imgContPath у Вас определяется в циклике: Цитата:
Цитата:
Правда проблему с prevContPath это не снимает. Теперь, вероятно привьюшки у Вас все одинаковые, т.е тоже какбы видна последняя картинка? Если так (а это так), создавайте битмапдату каждый раз, когда хотите отрендерить в нее подгруженное в мувиклип изображение. Структура приложения плохо согласуется с целями проекта. Почти везде осутствует типизация переменных. Вообщем, я думаю, лучше все это переделать. Попробовал исправить некторые ошибки до работоспособности кода, втиснув свои исправления в созданную Вами структуру (см.вложение). Получилось отвратительно.
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось Alex_beginner; 30.07.2008 в 18:06. |
|
|||||
|
Alex_beginner, вы как-то раз нетак давно выкладывали исходник, на похожую тему. Назывался файл "Последовательная загрузка изображений (created_by_Alex_beginner)" Так вот я сейчас решил по нему сделать свою задачу. Все получилось, но с загрузкой каждой новой фотки, битмапа тоже перерисовывается в неё, как вы и описали выше. Сейчас гляну что Вы прикрепили на этот раз...
__________________
Убейте меня! |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|