PDA

Просмотр полной версии : Запутался цикле


neFX
20.01.2008, 04:33
Делаю небольшой механизм который берёт данные из ХМЛ, в соответствии с ними, атачит нужные клипы, ну и как следствие нужно потом клипы удалять...
вот тут то и возникла загвоздка!
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("myxml.xml");
myXML.onLoad = function(success) {
if (success == true) {
_global.chislo_gorodov = myXML.firstChild.childNodes[0].childNodes.length;
var nod:XMLNode = myXML.firstChild.childNodes[0];
id = new Array();
c_status_id = new Array();
for (i=0; i<chislo_gorodov; i++) {
c_status_id = nod.childNodes[i].attributes.status_id;
sid = Number(c_status_id);
if (sid == 2) {
mcg = _root.attachMovie("zapis_mc01", "zapis_mc"+i, i, {_x:nod.childNodes[i].attributes.ix, _y:nod.childNodes[i].attributes.iy});
}
if (sid == 1) {
mcg = _root.attachMovie("zapis_mc02", "zapis_mc"+i, i, {_x:nod.childNodes[i].attributes.ix, _y:nod.childNodes[i].attributes.iy});
}
exit_but.onPress = function() {
_root.gotoAndStop(1);
zapis_mc1.removeMovieClip();

};
mcg.onRelease = function() {
fi = substring(this._name, 9, -1);
n = Number(fi);
c_x = nod.childNodes[n].attributes.ix;
c_y = nod.childNodes[n].attributes.iy;
inf_x = inf_y=c_name=nod.childNodes[n].attributes.name;
c_info = nod.childNodes[n].attributes.info;
c_status = nod.childNodes[n].attributes.status_id;
var inf_x = c_x;
var inf_y = c_y;
mtv = _root.attachMovie("inf", "inf", 999, {_x:inf_x, _y:inf_y});
mtv.header.onPress = function() {
startDrag(_root.mtv);
};
mtv.header.onRelease = function() {
stopDrag();
};
mtv.exit_but.onPress = function() {
mtv._visible = false;
};
};
}
}
};
по одному клипы удаляюся, а если пишу цикл то почему он почему то не работает(..
exit_but.onPress = function() {
_root.gotoAndStop(1);
for (i=0; i<chislo_gorodov; i++)
{
zapis_mc[i].removeMovieClip();
}

};
ТОварищи если не трудно взгляните,.. может вам удастца высмотреть тут какую нить вопиющую ошибку из-за которой не деляются клипы...

Mr. Fixit
20.01.2008, 04:46
а упростить никак?

olexandr
20.01.2008, 04:53
а почему ты, собственно говоря, создавая клипы с динамическими именами, удаляешь всегда клип "zapis_mc1"???
наверное, стоит при удалении также формировать имя с помощью счетчика. как считаешь? ;)

neFX
20.01.2008, 05:07
насчёт упростить,.. хз сам бы с удовольствием, но ароде всё нужно)
насчёт всё время 1 клип удаляю,..
в 1 примере там удаляю потому что так работает!
во втором просто описался,.. (щас поравил),.. но это нерабочий вариант!
вот исходник если интересно ссылка (http://mpei.info/upload/6a.zip)

MrPoma
20.01.2008, 13:26
вместо этого:

sid = Number(c_status_id);
if (sid == 2) {
mcg = _root.attachMovie("zapis_mc01", "zapis_mc"+i, i);
}if (sid == 1) {
mcg = _root.attachMovie("zapis_mc02", "zapis_mc"+i, i);
}

написать так:

sid = Number(c_status_id);
mcg = _root.attachMovie("zapis_mc0"+"sid", "zapis_mc"+i, i);


неудаляется по всей видимости потому что не видит chislo_gorodov

neFX
20.01.2008, 14:02
MrPoma: вообщем можно конечно поморочится и упростить ИФ, но мне как то так привычней чесно говоря..

по поваду того что не работает: chislo_gorodov и вравду невидит, однако ставлю в цикле вмето этой переменной число например 3 зарания трэйсом узнав значение этой переменной, и точно так же ничего не происходит...
exit_but.onPress = function() {
_root.gotoAndStop(1);
for (i=0; i<3; i++) {
zapis_mc[i].removeMovieClip();
}
};
щас подумаю почему не видно переменной..

MrPoma
20.01.2008, 14:16
ну потрейсите zapis_mc[i]. их он тоже судя по всему не видит:)

neFX
20.01.2008, 15:35
Дауж вы правы,..
попробывал выгружать бокс где лежат все эти клипы...

myXML.onLoad = function(success) {
if (success == true) {
_global.chislo_gorodov = ...;
var nod:XMLNode = ...;
id = new Array();

c_status_id = new Array();
for (i=0; i<chislo_gorodov; i++) {
c_status_id = nod.childNodes[i].attributes.status_id;
sid = Number(c_status_id);
if (sid == 2) {
mcg = _root.attachMovie("zapis_mc01", "zapis_mc"+i,i, {...});
}
if (sid == 1) {
mcg = _root.attachMovie("zapis_mc02", "zapis_mc"+i,i, {...});
}

};
trace(mcg);
}
}
};

выдаёт все атаченные клипы...
_level0.zapis_mc0
_level0.zapis_mc1
_level0.zapis_mc2

пробую выгрузить mcg,.. выгружает только последний...

myXML.onLoad = function(success) {
if (success == true) {
_global.chislo_gorodov = ...;
var nod:XMLNode = ...;
id = new Array();

c_status_id = new Array();
for (i=0; i<chislo_gorodov; i++) {
c_status_id = nod.childNodes[i].attributes.status_id;
sid = Number(c_status_id);
if (sid == 2) {
mcg = _root.attachMovie("zapis_mc01", "zapis_mc"+i,i, {...});
}
if (sid == 1) {
mcg = _root.attachMovie("zapis_mc02", "zapis_mc"+i,i, {...});
}

exit_but.onPress = function() {
trace(mcg);
mcg.unloadMovie();
_root.gotoAndStop(1);

};

}
}
};


и трэйс выдаёт
_level0.zapis_mc2


с чем это может быть связано?

MrPoma
20.01.2008, 15:52
ну дык вы же присваиваете переменной mcg мувики в цикле. после первой итерации _level0.zapis_mc1, после второй соответственно _level0.zapis_mc2. т.е. вы перезаписываете ее значение.
обращайтесь к ним так:

_root['zapis_mc'+i]

neFX
20.01.2008, 16:07
всё работает спасибо большое!!

если кому интересно конечный вариант вот..
exit_but.onPress = function() {
_root.gotoAndStop(1);
for (i=0; i<chislo_gorodov; i++) {
_root['zapis_mc'+i].removeMovieClip();
}
};

olexandr
20.01.2008, 19:39
о чем тебе и было сказано еще в самом начале темы :)