![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Только почему-то битмап не дорисовывает последнюю картинку...
import flash.display.BitmapData;
var my_mcl:MovieClipLoader = new MovieClipLoader();
var myListener:Object = new Object();
var count=0;
var flag:Boolean = true;//флаг, сигнализирующий возможность следующей загрузки
var i:Number = 1;//счетчик файлов, клипов
var N:Number = 30;//количество картинок
myListener.onLoadInit = function(target_mc:MovieClip) {
count++;
flag = true;
};
my_mcl.addListener(myListener);
this.onEnterFrame = function():Void {
if (flag) {
var zzz = "mc"+i;
var xxx = "mc" + (i-1);
var qqq = "dmc" +i;
var www = "dmc" + (i-1);
flag = false;
var bmd:BitmapData = new BitmapData(80, 80, true, 0x00000000);
bmd.draw(this[xxx]);
this[www].attachBitmap(bmd, this.getNextHighestDepth(), "auto", true);
this.createEmptyMovieClip(zzz, this.getNextHighestDepth());
this.createEmptyMovieClip(qqq, this.getNextHighestDepth());
if(i == 1) {
this[zzz]._x = 5;
this[zzz]._y = 5;
this[qqq]._x = 5;
this[qqq]._y = 430;
} else if( i <= 6) {
this[zzz]._x = this[xxx]._x + 85;
this[zzz]._y = this[xxx]._y;
this[qqq]._x = this[www]._x + 85;
this[qqq]._y = this[www]._y;
} else if( i == 7){
this[zzz]._x = 5;
this[zzz]._y = this[xxx]._y + 85;
this[qqq]._x = 5;
this[qqq]._y = this[www]._y + 85;
} else if (i <= 12) {
this[zzz]._x = this[xxx]._x +85;
this[zzz]._y = this[xxx]._y;
this[qqq]._x = this[www]._x +85;
this[qqq]._y = this[www]._y;
} else if (i == 13) {
this[zzz]._x = 5;
this[zzz]._y = this[xxx]._y + 85;
this[qqq]._x = 5;
this[qqq]._y = this[www]._y + 85;
} else if (i<= 18) {
this[zzz]._x = this[xxx]._x + 85;
this[zzz]._y = this[xxx]._y;
this[qqq]._x = this[www]._x +85;
this[qqq]._y = this[www]._y;
} else if (i == 19) {
this[zzz]._x = 5;
this[zzz]._y = this[xxx]._y + 85;
this[qqq]._x = 5;
this[qqq]._y = this[www]._y +85;
} else if (i <= 24) {
this[zzz]._x = this[xxx]._x + 85;
this[zzz]._y = this[xxx]._y;
this[qqq]._x = this[www]._x + 85;
this[qqq]._y = this[www]._y;
} else if (i == 25) {
this[zzz]._x = 5;
this[zzz]._y = this[xxx]._y + 85;
this[qqq]._x = 5;
this[qqq]._y = this[www]._y + 85;
} else {
this[zzz]._x = this[xxx]._x + 85;
this[zzz]._y = this[xxx]._y;
this[qqq]._x = this[www]._x + 85;
this[qqq]._y = this[www]._y;
}
my_mcl.loadClip("images/"+i+".jpg", zzz);
i++;
if (i>N) {
delete this.onEnterFrame; break;
}
}
__________________
Убейте меня! |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Отвлечемся на секунду от того, как программа получает список файлов. Это можно изменить и потом, все обдумав и обсудив с заказчиком.
Послушайте, джонатан, все операции с загруженными картинками можно проводить только после загрузки. Обратите внимание, что метод onLoadInit имеет ссылку на загруженное изображение (клип, который теперь это изображение). Т.е. в коде в теле обработчика у Вас есть ссылка _mc. Воспользуйтесь! pS Уважаю мнение коллег, но последовательная загрузка вовсе не является обязательным условием. Один лоадер прекрасно грузит сотню картинок одновременно, и для каждой произойдет событие и будет получена ссылка на клип. А уж дальше все в наших руках))))
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Джонатан! Вот второй вариант последовательной загрузки изображений без onEnterFrame (на мой взгляд эффективнее) - см.вложение, если понадобиться.
Последовательная загрузка может понадобиться в случае когда Вам необходимо во чтобы то ни стало загрузить какое-либо изображение первым, вторым,..., независимо от его размера (в байтах). Т.е. порядок срабатывания onLoadInit будет зависить непосредственно от порядка загрузки, установоленного разрабочиком, а не от размера загружаемых изображений.
__________________
Случайность, господа, это знаете ли непознанная необходимость. Последний раз редактировалось Alex_beginner; 30.07.2008 в 18:25. |
|
|||||
|
Alex_beginner, спасибо за предыдущий исходник! Все заработало! За этот тоже спасибо, полюбому пригодится.
Единственный недостаток, в том, что картины грузятся и размещаются в еврейском порядке (справа на лево), но уж это я думаю сам решу. Wolsh, да! Спасибо, я уже понял. Просто раньше не знал что это такое. Теперь буду знать. Всем спасибо, огромнейшее! Незнаю, что бы я делал без вашей доброты, понимания, и отзывчивости! //UPDATE Факинг шит! Не сказать, что хорошо, что MCL грузит фотки в разнобой, мне же надо чтобы когда жмякнешь на превью (bmd) показывалась фотка, соответствующая картинке на превью. А у меня получаеьтся когда я перевожу в битмап, фотки распологаются в разброс, а нумеруются по порядку... Никто не подскажет, как с этим быть?
__________________
Убейте меня! |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Чтож, продолжаем курс)))
Хотя я не понял, почему в разнобой, если загрузка последовательная. Или она не последовательная?)))) Я под последовательной понимаю что пока первая картинка не загрузилась, загрузка второй не начинается. Если так, то откуда разнобой? Теперь о структурировании хаоса. Если бы Вы порылись для начала в том, что здесь выкладывают товарищи на эту тему, то заметили бы одну характерную деталь. Для загрузки картинки создается некий контейнер - пустой клип. В этом контейнере создается еще один пустой клип, в который собственно и грузится картинка. Зачем? Затем, что клип, в который будет загружаться картинка, не способен сохранить присвоенные ему свойства - после загрузки они исчезнут. Но его контейнер может. Поэтому в цикле или рекурсии, где Вы запускаете загрузки, Вы сохраняете в свойстве контейнера некий идентификатор, допустим итератор цикла или другой каунтер. И тогда контейнер картинки будет хранить этот ID, и после загрузки Вы можете узнать его через mc._parent.ID. Естественно, таким же образом в свойствах контейнера Вы можете сохранить ссылку на большое изображение и все прочие данные, связанные с этим изображением. Посмотрите, например, тут http://www.flasher.ru/forum/showthread.php?t=112985
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Джонатан! Давайте поступим так. Вы полностью изложите что бы Вы хотели реализовать, в деталях желательно, а мы, в свою очередь попытаемся это воплотить в жизнь. А уж потом, развернем дискуссию на тему: "Ошибки кода, загрузки изображений (клипов)..., работа с BitmapData". Если Вы согласны дайте нам знать, письменно изобразив, то что Вы хотели бы реализовать. Дело в том, что мы знаем только поверхностные черты Вашего проекта, и поэтому, приходиться использовать наводящие вопросы, реплики и даже исходники, но пока безрезультатно. Давайте будем конструктивнее в нашей с Вами работе.
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
|
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 то не появляются. Но как только флешку чуть растянешь (сам плеер) то фотка появляеится. Бред какой-то. Смотрите. (флешку тянуть не получится, можно сменить размер окна броузера, тогда тоже появится) Креплю исходник. Может кто знает чт это такое???
__________________
Убейте меня! |
|
|||||
|
Регистрация: May 2008
Сообщений: 476
|
Хех!
Любопытный сайт у Вас получился. Да, странноватый эффект - при ресайзе браузера картинка появляется. А Вы не пробовали картинки менять (другие форматы)? Просьба, выложите файл в формате Flash8 (у меня нет CS3, sorry).
__________________
Случайность, господа, это знаете ли непознанная необходимость. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Вот в этом куске
this[qqq].onRelease = function() {
for(var j = 0; j <= N; j++) {
var ttt = "mc" +j;
var hhh = "dmc" +j;
this._parent[hhh]._alpha = 100;
this._parent[ttt]._alpha = 0;
//var twOut = new Tween(this._parent[ttt], "_alpha", mx.transitions.easing.Regular.easeOut, 100, 0, 0.5, true);
}
this._parent[zzz]._alpha = 50;
this._alpha = 20;
//var twIn = new Tween(this._parent[zzz], "_alpha", mx.transitions.easing.Regular.easeIn, 0, 100, 1, true);
}
_________ UPD: А у меня всё появляется, во флэше.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 31.07.2008 в 18:52. |
|
|||||
|
Wolsh, он равен mc+(номер клипа по которому клацнул.)
Нееее... Тут все ок. Я правда счас уже переделал. Короче, всеравно проблема непонятна, но как избежать её я придумал. Вобщем. Кто смотрел, получается у меня верхние картинки все расположены в одном и том же месте, а нижние на расстоянии друг от друга. Так вот, (у меня в коде закоменчено) я сделал чтобы и верхние тоже так-же распологались не в одном и том-же месте, и все стало работать. Как я понял, видимо глюк был, с Глубиной клипов, но почему только в первых 8-ми, я непонял. Но конечно это тоже не выход, т.к. я буду переносить этот код в свою галлерею, и там, мне нужно чтобы основные фотки стояли в одно и том-же месте... //UPDATE Все! Сделал! Действительно проблемы была c глубинами. Почему глючит я так и не понял, от глюга избавился. Я сделал, чтобы после того как клип становится _alpha = 0, еще вдобавок прописал _visible = false; Ну а потом когда по нему жмешь, _visible = true, и альфа 100 через Tween. Все заработало! Спасибо всем кто старался мне помочь, очень приятно, что уже никто не посылает меня в хелп а реально старается помочь. Особенное спасибо Alex_beginner`у за мега активное участие в решении моей проблемы, и Wolsh`за четкие объяснения многих вещей.
__________________
Убейте меня! |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:23. |
|
|
« Предыдущая тема | Следующая тема » |
|
|