Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Запутался цикле (http://www.flasher.ru/forum/showthread.php?t=106847)

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 примере там удаляю потому что так работает!
во втором просто описался,.. (щас поравил),.. но это нерабочий вариант!
вот исходник если интересно ссылка

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();
                                }
                        };



Часовой пояс GMT +4, время: 22:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.