PDA

Просмотр полной версии : как подгрузить свку [i] кол-во раз


CROL
23.08.2008, 06:57
в главный свф (index.swf) подгружаеться XML (clan.xml)

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<clan>
<pers>
<nick>nick1</nick>
<about>about1</about>
</pers>
<pers>
<nick>nick2</nick>
<about>about2</about>
</pers>
<pers>
<nick>nick3</nick>
<about>about3</about>
</pers>
</clan>

так же есть другая флешка (info.swf) она должна подгрузиться в index.swf столько раз, сколько тегов <pers> в clan.xml в разные мувики.
собственно вопрос как подгрузить их?

пишу в index.swf :
function loadXML(loaded) {
if (loaded) {
xmlPers = this.firstChild;
nick = [];
about = [];
total = xmlPers.childNodes.length;
for (i=0; i<total; i++) {
nick[i] = xmlPers.childNodes[i].childNodes[0].firstChild.nodeValue;
about[i] = xmlPers.childNodes[i].childNodes[1].firstChild.nodeValue;
}
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("clan.xml");
смотрю скока всего тегов <pers>, вытаскиваю значения с присвоением [i]


Дальше не могу понять что делать... не подскажите?

MrPoma
23.08.2008, 09:08
Создайте мувик-контейнер и с помощью MoviClipLoader'а грузите в него info.swf сколько угодно раз.

Wolsh
23.08.2008, 10:26
У Вас же есть уже цикл, в котором Вы читаете XML. Ну и загружайте новую свфку при каждой итерации по персу. (Хотя, имхо, я бы лучше аттачил с либы. Или допускается ситуация отсутствия персов?))))

CROL
23.08.2008, 18:19
ээээ... так не работает...что не так?

function loadXML(loaded) {
if (loaded) {
xmlPers = this.firstChild;
nick = [];
about = [];
total = xmlPers.childNodes.length;
for (i=0; i<total; i++) {
nick[i] = xmlPers.childNodes[i].childNodes[0].firstChild.nodeValue;
about[i] = xmlPers.childNodes[i].childNodes[1].firstChild.nodeValue;
createEmptyMovieClip("container"+[i], getNextHighestDepth());
container[i].loadMovie("info.swf")
};
};
};
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("clan.xml");

Obi
23.08.2008, 18:29
function loadXML(loaded) {
if (loaded) {
xmlPers = this.firstChild;
nick = [];
about = [];
total = xmlPers.childNodes.length;
for (i=0; i<total; i++) {
nick[i] = xmlPers.childNodes[i].childNodes[0].firstChild.nodeValue;
about[i] = xmlPers.childNodes[i].childNodes[1].firstChild.nodeValue;
createEmptyMovieClip("container"+[i], getNextHighestDepth());
container[i].loadMovie("info.swf")
};
};
};
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("clan.xml");

CROL
23.08.2008, 18:35
obi, так тоже не подгружает =(...пробовал так...но тоже не работает
function loadXML(loaded) {
if (loaded) {
xmlPers = this.firstChild;
nick = [];
about = [];
total = xmlPers.childNodes.length;
for (i=0; i<total; i++) {
nick[i] = xmlPers.childNodes[i].childNodes[0].firstChild.nodeValue;
about[i] = xmlPers.childNodes[i].childNodes[1].firstChild.nodeValue;
createEmptyMovieClip("container"+[i], getNextHighestDepth());
var infoLoader:MovieClipLoader = new MovieClipLoader();
infoLoader.loadClip("info.swf", container[i]);
};
};
};
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("clan.xml");

Wolsh
23.08.2008, 19:10
Что еще за container[i] ?
function loadXML(loaded) {
if (loaded) {
xmlPers = this.firstChild;
nick = [];
about = [];
total = xmlPers.childNodes.length;
for (i=0; i<total; i++) {
nick[i] = xmlPers.childNodes[i].childNodes[0].firstChild.nodeValue;
about[i] = xmlPers.childNodes[i].childNodes[1].firstChild.nodeValue;
var clip:MovieClip = createEmptyMovieClip("container"+[i], getNextHighestDepth());
clip.loadMovie("info.swf")
};
};
};
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("clan.xml");

CROL
23.08.2008, 19:21
Спасибо большое 8)

CROL
23.08.2008, 19:41
и как теперь отправить значение nick[i] в container[i]?

Wolsh
23.08.2008, 22:03
Элементарно)))) Надо просто грузить не в сам clip, а создавать в нем пустой мувиклип и загружать свф в него, а данные хранить в контейнере (clip, "container"+i). Просто после загрузки внешней свф в клип тот теряет "неродные" свойства. А контейнер их запомнит, потому что в него не будет загружаться ничего, он не поменяется))
Ну примерно так:
function loadXML(loaded) {
if (loaded) {
xmlPers = this.firstChild;
nick = [];
about = [];
total = xmlPers.childNodes.length;
for (i=0; i<total; i++) {
nick[i] = xmlPers.childNodes[i].childNodes[0].firstChild.nodeValue;
about[i] = xmlPers.childNodes[i].childNodes[1].firstChild.nodeValue;
var clip:MovieClip = createEmptyMovieClip("container"+[i], getNextHighestDepth());
var informer:MovieClip = clip.createEmptyMovieClip("informer", 1);
clip.id = i;
informer.loadMovie("info.swf")
};
};
};
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("clan.xml");
////
trace("клип: "+container3+"\nNick: "+nick[container3.id]+"\nabout: "+about[container3.id])Ну только трейс надо после загрузки делать))) loadMovie уже сто лет не используют, загрузку не отловить.
Ну и, конечно, Вы можете хранить ник и описание не в массиве, а в свойствах самого контейнера, если нужно, также как id))

CROL
23.08.2008, 22:21
просто в info.swf подгружаеться другой XML, а ссыслка на него следующая "www.site.ru/" + nick + ".xml"

Wolsh
24.08.2008, 00:32
Вот набросал тебе исходник.