Просмотр полной версии : Простой вопрос
Вопрос, у меня в лаере записана функция, которая должна возвращать переменные, но при её вызове, переменные отображаются как undefined ?
ПОЧЕМУ ?
Помогите плиз...
Пушистик
10.08.2003, 21:11
пАтаму что функция должна их вернуть! через return ...
дак там есть ретурн, но при вызове, он переменные не возвращает...
Пушистик
10.08.2003, 22:29
область видимость у функций тоже есть!....откуда вызываешь?
из мувика:
onClipEvent (load) {
gVars = _root.loadParam(3);
trace(gVars);
}
но трасировка, показывает пустое окно...
а когда пишу:
onClipEvent (enterFrame) {
gVars = _root.loadParam(3);
trace(gVars);
}
то всё нормально, но мне нужно именно при load...
кроме того я не могу вызвать эти переменные в других мувиках, приходится запускать функцию снова...
Пушистик
10.08.2003, 23:00
:)
это функция...
arr = [];
function loadParam(s) {
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("cfg/config.xml");
myXML.onLoad = function(success) {
if (success == true) {
myXML = myXML.firstChild;
if (s == 0) {
myXML = myXML.childNodes[0];
}
if (s == 1) {
myXML = myXML.childNodes[1];
}
if (s == 2) {
myXML = myXML.childNodes[2];
}
if (s == 3) {
myXML = myXML.childNodes[3];
}
for (i=0; i<myXML.childNodes.length; i++) {
arr[i] = myXML.childNodes[i].attributes.value;
}
}
};
return arr;
}
а это вызов...
onClipEvent (load) {
gVars = _root.loadParam(3);
trace(gVars);
}
HELP PLZ !!!
Пушистик
10.08.2003, 23:47
ну десь я те особо помочь не могу......т.к. нету XMLя...
но скажу что обишка вот тут:
for (i=0; i<myXML.childNodes.length; i++) {
arr[i] = myXML.childNodes[i].attributes.value;
}
и еще тут наеврно:
myXML = myXML.firstChild;
ну и дальше...
попробуй так:
arr = [];
function loadParam(s) {
myXML = new XML();
myXML.ignoreWhite = true;
myXML.load("cfg/config.xml");
myXML.onLoad = function(success) {
if (success == true) {
mXML = myXML.firstChild;
if (s == 0) {
mXML = myXML.childNodes[0];
}
if (s == 1) {
mXML = myXML.childNodes[1];
}
if (s == 2) {
mXML = myXML.childNodes[2];
}
if (s == 3) {
mXML = myXML.childNodes[3];
}
for (i=0; i<myXML.childNodes.length; i++) {
arr.push(mXML.childNodes[i].attributes.value);
}
}
};
return arr;
}
всё равно не катит :(
а XML такой:
<slotmachine>
<counters>
<all value="10"/>
</counters>
<param>
<slot1 value="1"/>
<slot2 value="2"/>
<slot3 value="1"/>
</param>
<slots>
<slot1 value="1"/>
<slot2 value="2"/>
<slot3 value="3"/>
<slot4 value="4"/>
<slot5 value="5"/>
<slot6 value="6"/>
</slots>
<control>
<date value="10-08-2003"/>
<game value="1"/>
</control>
</slotmachine>
Есть ещё варианты ?
Nox Noctis
11.08.2003, 02:01
1. вызвал загрузку
2. ПОДОЖДИ пока загрузится
3. обработай
вышенаписанное рекомендуется к произнесению в качесве молитвы перед сном, перед едой и перед включением компа :)
— ты вызываешь загрузку, потом в ОНЛОАДЕ пишешь заполнение массива (т.е. когда загрузится хмл, заполнится массив arr)
— потом ты вдруг возвращаешь еще не заполненный массив arr как будто уже все загрузилось и отпарсилось...
2Nox
Привет :)
Посоветуй как, потому как измаялся я в поисках ответа, а истина наверняка где-то рядом :)
Плиз, очень прошу помоги...
Nox Noctis
11.08.2003, 02:28
function loadParam(s, lnk) {
arr = [];
myXML = new XML();
myXML.s=s, myXML.lnk=lnk;
myXML.ignoreWhite = true;
myXML.load("cfg/config.xml");
myXML.onLoad = function(success) {
if (success) {
var myXML = myXML.firstChild;
myXML = myXML.childNodes[this.s];
for (var i=0; i<myXML.childNodes.length; i++) {
arr[i] = myXML.childNodes[i].attributes.value;
}
this.lnk.gVars = arr;
}
};
}
onClipEvent (load) {
_root.loadParam(3, this);
}
скажешь что не работает - покусаю
А массив Вернуть, как ?
мне же данные нужны :)
да, и ещё мне нужно пердавать переменные от одного мувика к другому, как бы это сделать, все мои робкие попытки как то решить эту проблему, жестоким образом упирались в undefind :(
может ты чего посоветуешь ?
Nox Noctis
11.08.2003, 02:36
Оригинал написал(а) Sheeva
А массив Вернуть, как ?
мне же данные нужны :)гррррррр...
куда вернуть ?
тебе нужно было чтобы массив попал в клип на котором висит онлоад под именем gVars - так ?
ну вот те скрипты как раз это и делают. как только хмл загружается, создается массив и записывается в клип который вызвал загрузку
что не так ?
не злись, просто я не понял как массив вызвать ? :confused:
мне же данные нужны ...
Nox Noctis
11.08.2003, 02:44
да я спокоен как мертвый удав, ага
что значит "вызвать массив" ?
сделай все необходимые действия с этим массивом отдельной функцией. можешь прямо в онлоад зафигачить определение этой функции... и просто поменяй "this.lnk.gVars = arr;" на вызов этой функции, и отдай ей массив... тпиа: "this.lnk.do_something(arr);"
где "do_something" - это и есть та функция внутри клипа
наверно я туплю...
но я ничего не понял :confused:
у меня задача такая, мне надо единственный раз загрузить те переменные что скрыты в хмл, и определить их как по умолчанию, а затем мне нужно с помощью события enterFrame, постоянно обновлять данные и сравнивать с теми что по умолчанию. Но как выудить это самое умолчание из того что ты написал я не знаю, слишком уж я мало знаю Флэш, поэтому мне не совсем понятно что в итоге делает та функция что ты написал :(
Nox Noctis
11.08.2003, 03:02
ну не могу же я все сделать за тебя, правда ?
если ты написал ту предыдущую функцию, то ты разберешься и в том что я написал... не так и много я там изменил...
массив попадает в нужный клип. это уже есть.
значит тебе нужно запустить твой онентерфрейм только после того как этот массив определился (вернулся из онЛоада)
ах, да... и да пребудет с тобой Сила :)
мне не понятно как он туда попадает, у меня был ретурн, который, почему то не работал...
а здесь как он определён не понятно ...
Пушистик
11.08.2003, 12:34
угу....чё он далает функция?чё возвращает....
мне кажеЦЦа если юзать эту функцию нужно массив вынести за функцию....а после ее вызова - обратится к нему...иначе ИМХО он бесполезна....
Nox Noctis
11.08.2003, 13:09
Пушистик, Sheeva, по-моему тут наука бессильна...
как еще объяснить ?
function loadParam(s, lnk) {
arr = [];
функция, два параметра, первый - номер ноды, второй - ссылка на клип который вызвал загрузку. создается массив arr. (причем поскольку отсутсвует слово var, то он создается не локально (на время выполнения функции), а прямо в руте. (там где у нас лежит функция))
myXML = new XML();
myXML.s=s, myXML.lnk=lnk;
myXML.ignoreWhite = true;
myXML.load("cfg/config.xml");
myXML.onLoad = function(success) {
исходный код, все как и было с той лишь разницей, что в объект хмл записываются параметры, чтобы потом их использовать в онлоаде. (так правильнее)
if (success) {
var myXML = myXML.firstChild;
myXML = myXML.childNodes[this.s];
если загрузилось успешно, то выбираем нужную ноду при помощи записанного параметра s, причем обращаемся к нему через this.s, поскольку все это внутри онлоада
for (var i=0; i<myXML.childNodes.length; i++) {
arr[i] = myXML.childNodes[i].attributes.value;
}
обходим все дочерние ноды и записываем в массив arr их значения
this.lnk.gVars = arr; теперь в клип, который вызвал загрузку (а ссылка на него хранится у нас в этом же объекте (this.lnk)) передаем ссылку на массив arr.
теперь то, что написано на самом клипе:
onClipEvent (load) {
_root.loadParam(3, this);
} то есть сразу после загрузки клипа, вызывается все вышеизложенное...
все. результат достигнут - в клипе оказался массив, сделанный из значений нод загруженного хмла.
повторяю - ретурн и не должен был работать, потому что загрузиться мгновенно хмл не может.
понятно ?
Пушистик
11.08.2003, 14:45
Нокс!:) да мне и было понятно...просто я в XML не продвинут:)
Nox Noctis
11.08.2003, 14:48
если юзать эту функцию нужно массив вынести за функцию....а после ее вызова - обратится к нему...иначе ИМХО он бесполезна.... а это к чему относилось, м ? :rolleyes:
Пушистик
11.08.2003, 15:07
дас ист из за невнимательности:)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.