Форум 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=152565)

Alexvblbl 19.03.2011 21:38

Не работает цикл
 
Код AS1/AS2:

                data_xml.onLoad = function() {
                        colXML = data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes.length;
                        //trace(data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes.length)
                        for(i=0; i<colXML; i++){
                                trace(_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i])
                                movie1=i+objname;
                                objname=_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.id;
                                trace(movie1)
                        //objname = _root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.name
                        ID1 = _root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.id
                        //trace(ID1)
                        movie1=_root.attachMovie("ID"+ID1, objname, this.getNextHighestDepth());
                        //trace(_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.posX)
                        movie1._x=_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.posX;
                        //trace(objname)
                        movie1._y=_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.posY;
                        movie1._visible=_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.vis;
                        movie1.loadMovie(_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes.ssil, objname)
                        trace(objname)
                        //movie1.getURL(_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.sobONPRESS)
                        movie1.onRollOver = function () {
                                //trace("ssss")
                                getURL("http://pff.ru", "_blank")
                                this.getURL(_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.sobONPRESS)
                                /*if (movie1._root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.sobONPRESS) {
                                movie1.getURL(_root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.sobONPRESS);
                                }*/

                        }
                        //trace(movie1._root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[1].attributes.sobONPRESS);
                        //trace(_root.data_xml.nodeValue[0])
                        //objname++;
                        //movie1++;
                        } // for закрыли
                };

Вопрос создает почему то 1 объект, а не 3 (их по запросу 3 проверял трейсом) и то последний. В чём проблема ?

udaaff 19.03.2011 22:03

О боже. Вы про переменные что-нибудь слышали? _root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes надо в переменную записать, а не писать эту простыню тысячу раз подряд.
this в данном случае ссылается на объект через который вызван обработчик, т.е. на data_xml, поэтому this.getNextHighestDepth() возвращает не то, что вы ожидаете.
Далее, вообще, не ясно, что вы творите с movie1.

Alexvblbl 19.03.2011 23:06

Цитата:

Сообщение от udaaff (Сообщение 981902)
О боже. Вы про переменные что-нибудь слышали? _root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes надо в переменную записать, а не писать эту простыню тысячу раз подряд.
this в данном случае ссылается на объект через который вызван обработчик, т.е. на data_xml, поэтому this.getNextHighestDepth() возвращает не то, что вы ожидаете.
Далее, вообще, не ясно, что вы творите с movie1.

Допустим я задам переменную для _root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes она будет обращаться таким путём МояПеременная.id ?
Ну дальше не работает. Это уже второй вопрос. Сейчас стоит вопрос не в этом.
А как сделать так, что бы работал цикл? Точнее, что бы создавались новые объекты, а не дублировался тот же объект в новое место?

udaaff 19.03.2011 23:10

Ну так вы глубину неверно задаете.
Цитата:

this в данном случае ссылается на объект через который вызван обработчик, т.е. на data_xml, поэтому this.getNextHighestDepth() возвращает не то, что вы ожидаете.
Цитата:

Допустим я задам переменную для _root.data_xml.childNodes[0].childNodes[0].childNodes[0].childNodes[i].attributes она будет обращаться таким путём МояПеременная.id ?
Да.

Alexvblbl 19.03.2011 23:43

Спасибо. Помогло.

Bgg 19.03.2011 23:46

Цитата:

Сообщение от udaaff (Сообщение 981902)
О боже.

Я тоже его вспомнил.

Alexvblbl 19.03.2011 23:48

Цитата:

Сообщение от Bgg (Сообщение 981930)
Я тоже его вспомнил.

Хе Хе ))
Код AS1/AS2:

movie1.onRollOver = function () {
getURL("http://pff.ru", "_blank")
}

Ну тогда почему не работает вот такой код в том же цикле ?

udaaff 20.03.2011 00:03

Вы с movie1 непонятные действия производите. Сначала в эту переменную записываете строку.
Код AS1/AS2:

movie1=i+objname;

Затем аттачите в неё мувик.
Код AS3:

movie1=_root.attachMovie("ID"+ID1, objname, _root.getNextHighestDepth());

А потом содержимое этого мувика перезаписываете содержимым загружаемого контента.
Код AS1/AS2:

movie1.loadMovie(attributes.ssil, objname)

И вот во время этой загрузки обработчик слетает. После загрузки наследуются только некоторые свойства, такие как координаты.
Поэтому onRollOver у вас не должен работать.

Вам здесь нужно создать пустой мувиклип, повесить на него ваш обработчик. В этом клипе создать контейнер. И грузить содержимое непосредственно в этот контейнер.

Alexvblbl 20.03.2011 00:46

Цитата:

Сообщение от udaaff (Сообщение 981936)

Вам здесь нужно создать пустой мувиклип, повесить на него ваш обработчик. В этом клипе создать контейнер. И грузить содержимое непосредственно в этот контейнер.

Эмм, и как код примерно выглядит ?

udaaff 20.03.2011 00:50

Код AS1/AS2:

var mc:MovieClip = _root.createEmptyMovieClip("mc", _root.getNextHighestDepth());
mc.onRollOver = mc_onRollOverHandler;
var container:MovieClip = mc.createEmptyMovieClip("container", 0);
container.loadMovie("test.png");
 
function mc_onRollOverHandler():Void
{
        trace(this + " onRollOver");
}



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

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