PDA

Просмотр полной версии : xml динамическая галерея


Маруська
23.10.2014, 01:27
есть задача - создать динамическую галерею со сложной структурой: Разделение по темам, внутри деление по слайдам, в каждом слайде n-ное количество картинок.

в общем, первая цель - при входе создать галерею, соответствующую первой теме, внутри неё слайды, на них по 3 картинки (если не хватает для последнего слайда картинок - то там 1 или 2).
объект item лежbт в библиотеке и имеtт соответствующиq идентификатор

Сразу проблема при подгрузке символа Item из библиотеки


kv=1;
this =game;
function addslide(mc:MovieClip)
{ xmlfile='data'+kv+'.xml';
dr.load(xmlfile);
}

dr.onLoad = function(success) {
//создаём галерею
gal=game.createEmptyMovieClip("gallery"+kv, game.getNextHighestDepth());//_root.attachMovie("gallery", "gallery"+kv);//создаём символ галереи
for (q=0; q<Math.ceil(dr.firstChild.childNodes.length/3); q++) //определяем количество слайдов в галерее
{ slide=game.gal.createEmptyMovieClip("slide"+q, game.getNextHighestDepth())//создаём слайд внутри галереи
for (k=q*3; k<q*3+3; k++)
{ if(k<dr.firstChild.childNodes.length)
{picHolder = this.firstChild.childNodes[k];
item = game.gal.slide.attachMovie("item", "item"+k, k);
trace(item)//UNDEFINED
item._x += q*40;
item.url = picHolder.attributes.url;
}
}//цикл для добавления картинок на слайд

}
}


скрипт внутри "item"

var mcl:MovieClipLoader = new MovieClipLoader();
listener = {};
listener.onLoadInit = function(targ_mc) {
targ_mc._width = 125;
targ_mc._height = 100;
};
mc = this.createEmptyMovieClip("pic", this.getNextHighestDepth());
mcl.addListener(listener);
mcl.loadClip(url, "pic");


кто бы - кто бы мне помог?

dark256
23.10.2014, 02:56
1. Нарисуйте структуру будущей XML, описывающей галерею.

2. Напишите КОД, загружающий эту XML и распознающий её элементы.

3. Напишите код, создающий "сетку", "шаблон" галереи для произвольного слайда (с эН картинок), который начинает работать после того, как п.2 полностью отработал.

4. После этого уже грузИте туда картинки.....

п.4. - самое простое, с миллионами примеров по форуму.....

Вы же все сразу свалили в одну кучу, пронеслись галопом по европам, накидали каких-то малосвязанных и неудобочитаемых кусков кода, непонятно где и отчего поймали грабли, сказали "ааа, помогите, горе, F1" и ждете теперь чего? Что кто-то сядет, домыслит нехватающие фрагменты общей картины, угадает с одного раза содержимое п.п.1-3 и изречет вам свет истины?


И не публикуйте такие скрижали, пожалейте глаза читателей.
for (q=0; q<Math.ceil(dr.firstChild.childNodes.length/3); q++) //определяем количество слайдов в галерее

Так гораздо читабельнее:
//определяем количество слайдов в галерее
var drNodeLength = Math.ceil(dr.firstChild.childNodes.length/3)
for ( var q=0; q<drNodeLength ; q++){
}


Ну и разумеется, в вашем месиве искать ошибки малореально.
Вот что вы тут делаете? Глубину вы откуда берете?
gal=game.createEmptyMovieClip("gallery"+kv, game.getNextHighestDepth());
slide=game.gal.createEmptyMovieClip("slide"+q, game.getNextHighestDepth())


скрипт внутри "item"
И ни в коем случае НИКОГДА НЕ ПИХАЙТЕ код внутрь клипов.

cl = game.gal.slide.attachMovie("item", "item"+k, k); - вторнули на стэйдж клип
в нём, как я понимаю (догадываюсь, читаю ваши мысли()пытаюсь типа)) вы СОЗДАЕТЕ пустой клип "pic"
Зачем? Нарисуйте в нем РАМОЧКУ, обзвите ее "pic" и всё уже будет визуально установлено по своим местам.
А поскольку после аттача клипа в нем уже все есть, передавайте загрузчику имя этого клипа.
А так как они у вас все одинаковые, загрузчик уже там сам найдет куда ему чего грузить.

mcl.loadClip(url, cl.pic);

Маруська
23.10.2014, 03:26
1. Структура xml примитивная. просто перечисление Item url.
2, 3, 4. Код, который отлично загружает элементы xml


dr = new XML();
dr.ignoreWhite = true;
dr.onLoad = function(success) {
for (q=0; q<this.firstChild.childNodes.length; q++) {
_root.picHolder = this.firstChild.childNodes[q];
trace(_root.picHolder.attributes.url);
item= _root.attachMovie("item", "item"+q, q);
item._x += q*40;
item.url = _root.picHolder.attributes.url;

}
}
dr.load("data.xml");


А вот делать сложнее - это уже не "самое простое"
грабли поймала в конкретном месте подгрузки символа из библиотеки.
И в коде масса комментариев - всё очень логично.

Добавлено через 33 минуты
в общем. как справлюсь - выложу исходники

Добавлено через 1 час 4 минуты
и могли бы мне подсказать, что символы createEmptyMovieClip это не просто символы, а пути. поэтому иерархия ни к чему.

dr.onLoad = function(success) {
//создаём галерею
gal=game.createEmptyMovieClip("gallery"+kv, game.getNextHighestDepth());
for (q=0; q<Math.ceil(dr.firstChild.childNodes.length/3); q++)
{ slide=gal.createEmptyMovieClip("slide"+q, game.getNextHighestDepth())//создаём слайд
slide._y+=q*20;
trace("slide._y "+slide._y);
for (k=q*3; k<q*3+3; k++)
{ if(k<dr.firstChild.childNodes.length)
{_root.picHolder = this.firstChild.childNodes[k];
cl = slide.attachMovie("item", "item"+k, k);
cl._x += (k-q*3)*100;
trace("cl._x "+cl._x);

cl.url = _root.picHolder.attributes.url;
}
}
}
}

Вот и всё. единственное, что я просила мне подсказать

dark256
23.10.2014, 11:08
Ваш вопрос выглядит следующим образом:

Я пишу MMORPG с серверами и блэкджеком на 10005000 тыщ онлайна, там есть аудио, видео, 3Д, юнити, яваскрипт, перл, пхп, пир2пир, видеочат и телемаркет. Почему переменная А класса chtoNiJama и переменная Б класса toKanava в сумме дают 3, хотя должны давать 2?

кто бы - кто бы мне помог?

Тут спасуют даже Вассерман с Ч.Норрисом....