Вход

Просмотр полной версии : не подгружается XML


cdc7600
14.01.2009, 15:10
на сцене 7 экземпляров клипов, вложенных в один (для удобства скрола)
пытаюсь загрузить в каждый картинку, но трассируется, что адрес не определён, не подскажите в чём проблема?
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
}

} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("1.xml");

dsk.dsk1.loadMovie(image[0], 1);
dsk.dsk2.loadMovie(image[1], 1);
dsk.dsk3.loadMovie(image[2], 1);
dsk.dsk4.loadMovie(image[3], 1);
dsk.dsk5.loadMovie(image[4], 1);
dsk.dsk6.loadMovie(image[5], 1);
dsk.dsk7.loadMovie(image[6], 1);

хмл
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<images>
<pic>
<image>img/1.jpg</image>
<caption>dsk1</caption>
</pic>
<pic>
<image>img/2.jpg</image>
<caption>dsk2</caption>
</pic>
<pic>
<image>img/3.jpg</image>
<caption>dsk3</caption>
</pic>
<pic>
<image>img/4.jpg</image>
<caption>dsk4</caption>
</pic>
<pic>
<image>img/5.jpg</image>
<caption>dsk5</caption>
</pic>
</images>

DarkLight
14.01.2009, 15:13
Выполнение ActionScript-кода является асинхронным, а Вы пишете код, считая его синхронным. Строки
xmlData.load("1.xml");
dsk.dsk1.loadMovie(image[0], 1);
выполнятся сразу друг за другом, поэтому пути неопределенные и получаются.
Загружайте картинки после того, как удостоверились, что xml загружен.

P. S. Вместо loadMovie давно рекомендуется использовать MovieClipLoader, дающий больший контроль над процессом загрузки.

cdc7600
14.01.2009, 16:01
добавила такую проверку, но всё равно не помогает (
а с классом MovieClipLoader, весьма сложно получится
dsk.dsk1.onEnterFrame = function() {

filesize = dsk.dsk1.getBytesTotal();
loaded = dsk.dsk1.getBytesLoaded();
if (loaded == filesize) {
dsk.dsk1.loadMovie(image[0], 1);

}
}

amexdesign
14.01.2009, 16:09
если уж далее с loadMovie, то вот так:
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
dsk.dsk1.loadMovie(image[0], 1);
dsk.dsk2.loadMovie(image[1], 1);
dsk.dsk3.loadMovie(image[2], 1);
dsk.dsk4.loadMovie(image[3], 1);
dsk.dsk5.loadMovie(image[4], 1);
dsk.dsk6.loadMovie(image[5], 1);
dsk.dsk7.loadMovie(image[6], 1);
}

} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("1.xml");

но DarkLight совершенно прав насчёт MovieClipLoader, и ничего сложного

Добавлено через 3 минуты
небольшая поправочка:
function loadXML(loaded) {
if (loaded) {
xmlNode = this.firstChild;
image = [];
description = [];
total = xmlNode.childNodes.length;
for (i=0; i<total; i++) {
image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
}
dsk.dsk1.loadMovie(image[0], 1);
dsk.dsk2.loadMovie(image[1], 1);
dsk.dsk3.loadMovie(image[2], 1);
dsk.dsk4.loadMovie(image[3], 1);
dsk.dsk5.loadMovie(image[4], 1);
dsk.dsk6.loadMovie(image[5], 1);
dsk.dsk7.loadMovie(image[6], 1);

} else {
content = "file not loaded!";
}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("1.xml");

cdc7600
14.01.2009, 16:15
спасибо большое) посмотрю ёщё раз MovieClipLoader, может разберусь)