PDA

Просмотр полной версии : XML


MIschanja_89
09.10.2009, 14:18
Ам, есть наболевший вопросик.. Такая ситуация: я использую один сценарий и один мувиклип, для того чтобы реализовать несколько галерей с разными фотками. У меня это получилось, но есть проблемма - каждый раз когда я нажимаю на какую нить кнопку(разные категории), я подключаю разные XML файлы для галереи, так вот все эти XML файлы смешиваются, поскольку я не знаю как "выгрузить" прошлый XML и загрузить следующий(точнее как загрузить я знаю). Получается своеобразное наложение!!! Порылся в литературе, ничего толкового не нашел, думал пустой XML заливать каждый раз при нажатии новой кнопки - тоже не вариант. Если есть идеии, подскажите!!!

Добавлено через 16 минут
Уже пробовал даже использовать один XML источник, только брать разлиные диапазоны(например, для одной категории от 1 до 16, второй -от 17 до 20), Работает, но все равно такой же эффект((

amesqit
09.10.2009, 14:49
Возможно вы просто добавляете данные к уже имеющимся, не уничтожая то что было, в таком случае первый раз все отрабатывает на ура, а дальнейшие попытки могут привести к подобным ситуациям, в любом случае без кода понять, что именно не так, сложно.

MIschanja_89
09.10.2009, 14:58
import mx.transitions.*;
var score:Number = 0;
var name_:Number = 0;
var music:Sound = new Sound();
music.attachSound("sound3");
/////////////////
var xmlPhotos:XML = new XML();
var initThumb:Object = new Object();

_root.tea.black.black_elit_tea.onRelease = function() {
exam._x = 47.9;
score = 0;
_root.temp1._visible = true; // а это и есть мой мовиклип - один для всех

xmlPhotos.load("photos1.xml");
/****************handle events**************/
xmlPhotos.onLoad = function() {
for (var i:Number = 0; i<12; i++) {

initThumb.photo = (xmlPhotos.firstChild.childNodes[i].attributes.photo);
makeAThumb(i);
score += 110;
}


};

function makeAThumb(num) {
thumbName = "mcThumb"+num;
exam.attachMovie("thumb",thumbName,num,initThumb);
exam[thumbName].mcPhoto.loadMovie("images/thumbs/"+exam[thumbName].photo+".jpg");
exam[thumbName]._x = score;
exam[thumbName]._y = 0;
exam[thumbName]._alpha = 70;
}


initThumb.onRollOver = function() {
thumbFade = new Tween(this, "_alpha", none, 70, 100, .5, true);
};
initThumb.onRollOut = function() {
thumbFade.yoyo();
};

xmlPhotos.ignoreWhite = true;

}

_root.tea.black.black_puer_tea.onRelease = function() {

_root.temp1._visible = true; // снова мувиклип
exam._x = 47.9;
score = 0;

xmlPhotos.load("photos1.xml");
/****************handle events**************/
xmlPhotos.onLoad = function() {
for (var i:Number = 13; i<18; i++) {

initThumb.photo = (xmlPhotos.firstChild.childNodes[i].attributes.photo);

makeAThumb(i);

score += 110;
}


};




function makeAThumb(num) {

thumbName = "mcThumb"+num;
exam.attachMovie("thumb",thumbName,num,initThumb);
exam[thumbName].mcPhoto.loadMovie("images/thumbs/"+exam[thumbName].photo+".jpg");
exam[thumbName]._x = score;
exam[thumbName]._y = 0;
exam[thumbName]._alpha = 70;
}


initThumb.onRollOver = function() {
thumbFade = new Tween(this, "_alpha", none, 70, 100, .5, true);
};
initThumb.onRollOut = function() {
thumbFade.yoyo();
};


/****************set properties**************/
xmlPhotos.ignoreWhite = true;
}

Таки да, ты прав я я добавляю к уже имеющимся, в том то и соль. Я не знаю как от предыдущих избавиться, И надо учитывать, что их удалять не надо совсем, мне ведь еще сюда возравщаться надо будет, допустип заходил еще раз взглянуть на галерею, захожу а там пусто...

Добавлено через 4 минуты
Да, и простите за читаемость кода, это рабочий вариант.. Так что вот))

amesqit
09.10.2009, 15:13
поместите код в теги тут есть специальная кнопочка для этого, название темы и так подпадает под критерия закрыитя + код не очень читаемый, как вы говорите, но без тегов AS, читабельность и желание в него всматриваться пропадает вообще :)

MIschanja_89
09.10.2009, 15:24
import mx.transitions.*;
var score:Number = 0;
var name_:Number = 0;
var music:Sound = new Sound();
music.attachSound("sound3");
/////////////////
var xmlPhotos:XML = new XML();
var initThumb:Object = new Object();
/////////////////
_root.tea.black.black_elit_tea.onRelease = function() {
exam._x = 47.9;
score = 0;
_root.temp1._visible = true; // это общий и единственный мувиклип
xmlPhotos.load("photos1.xml");
/****************handle events**************/
xmlPhotos.onLoad = function() {
for (var i:Number = 0; i<12; i++) {
initThumb.photo = (xmlPhotos.firstChild.childNodes[i].attributes.photo);
makeAThumb(i);
score += 110;
}

};

function makeAThumb(num) {
thumbName = "mcThumb"+num;
exam.attachMovie("thumb",thumbName,num,initThumb);
exam[thumbName].mcPhoto.loadMovie("images/thumbs/"+exam[thumbName].photo+".jpg");
exam[thumbName]._x = score;
exam[thumbName]._y = 0;
exam[thumbName]._alpha = 70;
}

/****************set properties**************/
xmlPhotos.ignoreWhite = true;
}

_root.tea.black.black_puer_tea.onRelease = function() {
_root.temp1._visible = true; // это общий и единственный мувиклип
exam._x = 47.9;
score = 0;
xmlPhotos.load("photos1.xml");
/****************handle events**************/
xmlPhotos.onLoad = function() {
for (var i:Number = 13; i<18; i++) {
initThumb.photo = (xmlPhotos.firstChild.childNodes[i].attributes.photo);
makeAThumb(i);
score += 110;
}
};

function makeAThumb(num) {
thumbName = "mcThumb"+num;
exam.attachMovie("thumb",thumbName,num,initThumb);
exam[thumbName].mcPhoto.loadMovie("images/thumbs/"+exam[thumbName].photo+".jpg");
exam[thumbName]._x = score;
exam[thumbName]._y = 0;
exam[thumbName]._alpha = 70;
}

/****************set properties**************/
xmlPhotos.ignoreWhite = true;
}

Добавлено через 4 минуты
Это дело работает в каждом из случаем, но происходит наложение(например в одной галереи 8 элементов показало, я захожу в галерею где их 16, потом внова в первую и там уже не 8 а 16 - большее количество перекрыло меньшее, хотя элементы все разные...

amesqit
09.10.2009, 17:04
Ваша галерея не отличается особой универсальностью и код написан не очень приятно, ничего личного и сильно не вникал в код :)
По сути вопроса, в первом случае у вас 12 фотографий, которые вы выстроили, во втором у вас их 5, аттачите вы все в один и тот же клип exam, и отступ score делаете равным 0, но загружаете вы всегда на разные слои, поэтому у вас происходиткак бы перекрытие. т.е. выглядит это примерно так изображу в виде слоев нажимая по очереди кнопки.

кнопка 1
1 2 3 4 5

кнопка 2
6 7 8 9
1 2 3 4 5

Повторюсь, то что было до вызова у вас не уничтожается. Надеюсь понятно объяснил.

MIschanja_89
09.10.2009, 17:15
Эм, спасибо, за то что разъяснили. Хотя я это и сам прекрасно понимаю, я хотел бы услышать, что можно предпринятьв этом случае.. Ну там подскажите, елси знаете, а по поводу уникальности - на это я не претендовал, хочу лишь получить 100% работающий вариант.

amesqit
09.10.2009, 17:34
добавьте в начало кода массив, например ar_movie,
var ar_movie: Array = new Array()
во вермя аттача делайте
ar_movie[num] = exam.attachMovie("thumb",thumbName,num,initThumb);
а удаление мувиков сделайте порйдясь по всем элементам данного массива, первым делом, как только происходит событие onLoad, это должно решить все проблемы.
так же можно заменить код
thumbName = "mcThumb"+num;
exam.attachMovie("thumb",thumbName,num,initThumb);
на

var depth = exam.getNextHighestDepth();
thumbName = "mcThumb"+depth;
exam.attachMovie("thumb",thumbName,depth,initThumb);

wvxvw
09.10.2009, 17:53
Название темы не раскрывает сути вопроса.