Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Action script 2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=49)
-   -   LoadVars и проблема видимости переменных. (http://www.flasher.ru/forum/showthread.php?t=65212)

genine 25.11.2004 21:42

LoadVars и проблема видимости переменных.
 
Доброе время суток.

Проблема такая:
есть 2 мувика. 1-й загружает 2-го.

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

Код первого мувика(magazin.swf):

_global.id_categorii="1";
_global.id_page="1";
_global.id_tovara="0";
_global.pic1=1;
_global.pic2=1;
_global.pic3=1;
_global.pic4=1;
_global.pic5=1;
_global.pic6=1;
_global.cvet=1;
_global.morecvet="1";
_global.page_less="1";
_global.page_more="1";
_global.page_total="1";

system.useCodePage = true;
loadMovie("vipad_menu.swf", vipad_menu);
loadMovie("menu_tov.swf", tovar_menu); // это я как раз второй мувик подгружаю.


Код второго мувика:

var c = new LoadVars();
c.onLoad = function() {
pic1 = this["pic1"];
pic2 = this["pic2"];
pic3 = this["pic3"];
pic4 = this["pic4"];
pic5 = this["pic5"];
pic6 = this["pic6"];
page_total = this["page_total"];
page_more = this["page_more"];
page_less = this["page_less"];
page_number.text = id_page+" из "+ page_total +" "+page_less+" "+page_more; // это текстовое поле, в которое я вывожу несколько из подгруженных переменных. Если эту строку кода вынести за пределы функции, то вместо всех переменных выводятся единицы, то есть значение, которым я изначально в 1-м мувике заполнил переменные.
};
c.load("menu_tov.php?id_categorii="+id_categorii+"&id_page="+id_page,"get");

// а это я подгружаю картинки с товаром.
if (pic1 == "no") {
btnpic1._width = 0;
btnpic1._height = 0;
} else {
btnpic1._width = 84;
btnpic1._height = 108;
loadMovie(pic1+".jpg", "movpic1");
}
if (pic2 == "no") {
btnpic2._width = 0;
btnpic2._height = 0;
} else {
btnpic2._width = 84;
btnpic2._height = 108;
loadMovie(pic2+".jpg", "movpic2");
}

if (pic3 == "no") {
btnpic3._width = 0;
btnpic3._height = 0;
} else {
btnpic3._width = 84;
btnpic3._height = 108;
loadMovie(pic3+".jpg", "movpic3");
}

if (pic4 == "no") {
btnpic4._width = 0;
btnpic4._height = 0;
} else {
btnpic4._width = 84;
btnpic4._height = 108;
loadMovie(pic4+".jpg", "movpic4");
}

if (pic5 == "no") {
btnpic5._width = 0;
btnpic5._height = 0;
} else {
btnpic5._width = 84;
btnpic5._height = 108;
loadMovie(pic5+".jpg", "movpic5");
}

if (pic6 == "no") {
btnpic6._width = 0;
btnpic6._height = 0;
} else {
btnpic6._width = 84;
btnpic6._height = 108;
loadMovie(pic6+".jpg", "movpic6");
}

if (page_more == "no") {
page_more_btn._width = 0;
page_more_btn._height = 0;
} else {
page_more_btn._width = 27.1;
page_more_btn._height = 8;
}

if (page_less == "no") {
page_less_btn._width = 0;
page_less_btn._height = 0;
} else {
page_less_btn._width = 27.1;
page_less_btn._height = 8;
}



Вот... Помогите пожалуйста разобраться. почему в итоге подгрузки в глобальных переменных значения не меняются.

StimS 25.11.2004 23:16

Совсем не в тему, но совет:

Эти блоки ИФ иожно заменить всего одим циклом. И места меньше, и ошибки (если будут) отрегулировать проще :)

genine 26.11.2004 00:25

Все верно, и про цикл и про то, что не в тему :)
Все равно спасибо за внимание.

А может все-таки кто нибудь знает в чем сама проблема? ну кроме ДНК :)

Подскажите плз....
я могу конечно для всех переменных насоздавать текстовых полей на невидимом(нижнем) слое и через эти поля принятые переменные в глобальные перекинуть рас уж в текстовое поле я могу нормально присваивать переменные... Но это решение видится мне неестественным и очень кривым.

Очень жду Ваших ответов.

genine 26.11.2004 00:34

Цитата:

Оригинал написал(а) StimS
Совсем не в тему, но совет:

Эти блоки ИФ иожно заменить всего одим циклом. И места меньше, и ошибки (если будут) отрегулировать проще :)

Погоди, а как одним циклом заменить? там же разные названия переменных...

я же не смогу названия в цикле перебирать...
или смогу? если да, то как?

genine 26.11.2004 12:25

Я пришел в итоге к более простому примеру, который не работает.
Просто беру мувик и загружаю в него переменную.
вывожу ее внутри функции загрузки и снаружи (после вызова загрузки) в разные поля.
Значения получаются разные...
то есть внутри функции все нормально выводится, а вот снаружи они выводятся с теми значениями, которые были до выполнения функции загрузки.

я подумал, что надо как-то проверять загрузились ли уже переменные и написал для этого вот такой код:

var interval_id;
_global.pict = 1;
var c = new LoadVars();

c.onLoad = function() {
pict = this["pic1"];
dyn_txt1.text = pict;
};

function settime(){
if (_root.c.onload == "1") {
_root.dyn_txt2.text = pict;
clearInterval(interval_id);
}
}
c.load("menu_tov.php","get");
interval_id = setInterval(settime, 500);

теперь в поле вообще в итоге ничего не записывается.

замучился уже с этой проблемой возиться. подскажите плз в чем проблема.

silin 26.11.2004 19:26

if (_root.c.onload == "1") никогда не выполнится ( trace(_root.c.onload ) и увидишь почему), потому и не записыается

genine 27.11.2004 15:20

Цитата:

Оригинал написал(а) silin
if (_root.c.onload == "1") никогда не выполнится ( trace(_root.c.onload ) и увидишь почему), потому и не записыается
Мдя... выводится: [type Function] если trace(_root.c.onload)

А как же проверить подгрузились переменные или нет?
Я уже и на форуме смотрел и в уроках, даже вот новую для себя вещь setInterval разобрался как использовать, а результата все нет :confused:

Неужели никто не знает или не хочет подсказать как корректно выполнить проверку?

silin 27.11.2004 15:45

так например ,не понял тока зачем, если есть обрабочик..
done=false
c.onLoad = function() {
done=true
...
}

function settime(){
if (done ) {
_root.dyn_txt2.text = pict;
clearInterval(interval_id);
}
}

genine 27.11.2004 17:07

Цитата:

Оригинал написал(а) silin
так например ,не понял тока зачем, если есть обрабочик..
done=false
c.onLoad = function() {
done=true
...
}

function settime(){
if (done ) {
_root.dyn_txt2.text = pict;
clearInterval(interval_id);
}
}

Супер!!! Все работает, спасибо!
Я просто впал в какой-то ступор. Чуствую себя тормозом :)
Спасибо, что вывел меня из состояния торможения!

Всем спасибо за внимание :)

StimS 27.11.2004 18:24

И в завершение, если тебе еще интересно про цикл, то вот:

for(var p=1;p<=6;p++){
pic="pic"+p; btn="btnpic"+p;
if (pic == "no") {
btnpic._width = 0;
btnpic._height = 0;
} else {
btnpic._width = 84;
btnpic._height = 108;
loadMovie(pic+".jpg", "movpic"+p);
}

Разумеется, можно еще урощать и упрощать :)))
Разберешься?


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

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