![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jun 2007
Сообщений: 118
|
Пытаюсь сделать галерею. Есть такой код:
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);
var dist:Number = 12;
// создаем объект XML
var my_xml:XML = new XML();
// игнорируем пробелы
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success:Boolean) {
if (success) {
// узнаем сколько всего картинок
var total = my_xml.firstChild.childNodes.length;
// запускаем цикл по XML
for (var i = 0; i<total; i++) {
var image:String = my_xml.firstChild.childNodes[i].attributes.small;
var cont:MovieClip = container_mc.createEmptyMovieClip("cont"+i, i);
var img:MovieClip = cont.createEmptyMovieClip("img", 1);
loader.loadClip(image,img);
// это номер клипа
cont.count = i;
listener.onLoadInit = function(target:MovieClip) {
if (target._parent.count%2 == 0) {
target._y = (98-target._height/2)-10;
} else {
target._y = (98-target._height/2)+10;
}
target._x = target._width*target._parent.count;
trace(target._parent.count);
};
}
}
};
// грузим XML
my_xml.load("gallery.xml");
И для того, чтобы узнать как расположить картинки я внутри onLoadInit умножаю ширину текущего клипа на счетчик target._parent.count, в котором содержится номер текущего клипа (0, 1, 2, 3, 4, 5, 6). Но проблема в том, что trace(target._parent.count); выдает номера клипов в обратном порядке, т.е. (6, 5, 4, 3, 2, 1). Из-за чего все картинки расставляются как попало. Помогите пожалуйста решить проблему и расставить картинки как положено. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
Грузите картинки поочереди. Когда первая загрузилась, грузите вторую и так далее.
|
|
|||||
|
Регистрация: Jun 2007
Сообщений: 118
|
А это как? Подскажите код, буду очень признателен.
|
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
var count:Number = 0;
var total:Number = 10;
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
loader.addListener(listener);
function loadNextPicture():Void {
if(count < total) {
var cont:MovieClip = container_mc.createEmptyMovieClip("cont"+count, count);
var img:MovieClip = cont.createEmptyMovieClip("img", 1);
var pathToImg:String = String("pictures/picture"+count);
count ++;
loader.loadClip(pathToImg ,img);
listener.onLoadInit = loadNextPicture;
}
};
Последний раз редактировалось Obi; 25.08.2008 в 19:15. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
http://flasher.ru/forum/showthread.php?t=114482
Код лучше смотреть на последней странице
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Jun 2007
Сообщений: 118
|
Спасибо за ответы, буду разбираться и пробовать.
|
|
|||||
|
Регистрация: Jun 2007
Сообщений: 118
|
Взял код с последней страницы как вы и сказали
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);
var arr:Array = Array();
// создаем объект XML
var my_xml:XML = new XML();
// игнорируем пробелы
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success:Boolean) {
if (success) {
// узнаем сколько всего картинок
var total:Number = my_xml.firstChild.childNodes.length;
for (var k:Number = 0; k<total; k++) {
arr.push(my_xml.firstChild.childNodes[k].attributes.small);
}
}
};
var dist:Number = 12;
var imgCounter:Number = 1;
listener.onLoadInit = function(target:MovieClip):Void {
target.flagLoaded = true;
target._x = target._width*imgCounter;
if (imgCounter == total) {
loader.removeListener(listener);
delete listener;
delete loader;
}
imgCounter++;
};
function loadImg():Void {
for (var i:Number = 0; i<=total-1; i++) {
container_mc.createEmptyMovieClip(i,container_mc.getNextHighestDepth());
container_mc[i].flagLoaded = false;
loader.loadClip(arr[i],container_mc[i]);
}
}
// грузим XML
my_xml.load("gallery.xml");
loadImg();
В чем моя ошибка? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Оёёй, чето совсем не так.
Во-первых, loadImg надо вызывать только после загрузки xml (в том примере что я показал не было xml, там адреса картинок известны заранее поэтому сразу начиналась загрузка). А у Вас порядок такой должен быть: Загружаем xml, считываем данные в массив и после этого запускаем последовательную загрузку. Причем последовательную - это значит что только на событие onLoadInit начинаем загрузку следующей картинки. (Собственно, давая ссылку, я подразумевал мой код)))) Обработчик onLoadInit сам разбирается с тем какую грузить, и снова запускает loadImg для следующей картинки. Перед этим он увеличивает значение счетчика и смотрит, пора ли прекращать (ну или просто смотрит по наличию объекта в массиве). Если адреса кончились - чистимся от хлама и конец. Т.е. загрузка по циклу в принципе не то что надо.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 28.08.2008 в 15:52. |
|
|||||
|
Регистрация: Jun 2007
Сообщений: 118
|
Что-то у меня ничего не получается:
var arr:Array = Array();
var imgCounter:Number = 0;
var dist:Number = 12;
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);
// создаем объект XML
var my_xml:XML = new XML();
// игнорируем пробелы
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success:Boolean) {
if (success) {
// узнаем сколько всего картинок
var total:Number = my_xml.firstChild.childNodes.length;
for (var k:Number = 0; k<total; k++) {
arr.push(my_xml.firstChild.childNodes[k].attributes.small);
}
listener.onLoadInit = function(target:MovieClip):Void {
target._x = 0;
if (imgCounter<total) {
loadImg(imgCounter);
} else {
loader.removeListener(listener);
delete listener;
delete loader;
}
imgCounter++;
};
function loadImg(counter:Number) {
container_mc.createEmptyMovieClip(counter, container_mc.getNextHighestDepth());
loader.loadClip(arr[counter], container_mc[counter]);
}
loadImg(0);
}
};
// грузим XML
my_xml.load("gallery.xml");
|
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А, нет, не так конечно. Вы же засунули обработчик в обработчик. У Вас onLoadInit находится внутри XML.onLoad. А надо было просто вызвать из XML.onLoad начало загрузки, т.е. loadImg(0). Сам же код лоадера и листенера оставить снаружи)
Ну вот так var arr:Array = new Array();
var imgCounter:Number = 0;
var dist:Number = 12;
// создаем загрузчик клипов
var loader:MovieClipLoader = new MovieClipLoader();
// создаем слушатель для загрузчика
var listener:Object = new Object();
// добавляем слушатель к загрузчику
loader.addListener(listener);
var total:Number = null;
// сoздаем контейнер
var container_mc:MovieClip = _root.createEmptyMovieClip("container_mc", _root.getNextHighestDepth());
// создаем объект XML
var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success:Boolean) {
if (success) {
// узнаем сколько всего картинок
total = my_xml.firstChild.childNodes.length;
for (var k:Number = 0; k<total; k++) {
arr.push(my_xml.firstChild.childNodes[k].attributes.small);
}
trace("XML loaded!\n--------------\nTotal : "+total+" images in List")
loadImg(0);
}
};
////
listener.onLoadInit = function(target:MovieClip):Void {
trace("--------------\nImage "+imgCounter+" loaded!")
imgCounter++;
target._x = dist*imgCounter;
if (imgCounter<total) {
loadImg(imgCounter);
} else {
loader.removeListener(listener);
delete listener;
delete loader;
}
};
function loadImg(imgCounter:Number) {
var pic:MovieClip = container_mc.createEmptyMovieClip("mc"+imgCounter, imgCounter);
loader.loadClip(arr[imgCounter], pic);
}
// грузим XML
my_xml.load("gallery.xml");
__________________
Reality.getBounds(this); |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:11. |
|
|
« Предыдущая тема | Следующая тема » |
|
|