Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   странное поведение loadVariables (http://www.flasher.ru/forum/showthread.php?t=68906)

beginnerflasher2005 08.09.2005 12:43

странное поведение loadVariables
 
Создаем клип, добавляем динамический текст и связываем его с переменной rr.
В первом кадре вводим:

rr=1;
this.loadVariables("rr.txt");
trace(rr);

Никак не могу понять, что за ерунда такая:
trace выдаёт 1
а динам. поле показывает 1 и сразу 2 (в файле прописано rr=2)

FreeLander 08.09.2005 13:18

просто процесс загрузки переменных из файла занимает какое-то время, на тот момент, когда ты трэйсишь rr, загрузка ещё не завершилась

beginnerflasher2005 08.09.2005 15:57

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

beginnerflasher2005 08.09.2005 16:01

Пробовал так: - ролик "висит"

f=false;

rr=1;
this.loadVariables("rr.txt");
while (f==false) {};
trace(rr);

onData = function(){
f=true;
}

beginnerflasher2005 08.09.2005 16:15

А вообще, конечно, интересный принцип работы ...
Если я вызвал loadVariables - то, наверное, я хочу сейчас прочитать значения переменных, а не когда получится.
А выходит, что значение переменной поменяется в непредсказуемое время, когда вовсе уже и не надо (код выполняется дальше).
Смысл?!...

3dmax 08.09.2005 16:24

Я с этой проблемой столкнулся давно и мне предлжили такой вариант,
короче попробуй так:

loadVariables("rr.txt", "");
this.onEnterFrame=function()
{ if(rr) { //пока rr не станет чем-то, тоесть загрузится
trace(rr)
delete this.onEnterFrame;
}}
stop();

Я так уже много сделал и все работает. :cool:

А почему у тебя название файла и переменной одинаковые, не запутаешься? ;)

7thsky™ 08.09.2005 16:30

Смысл в том:

* Флэш timeline based, то есть привязка исполняемого сейчас кода к кадру, то есть кадр не кончиться и не перейдет на другой пока не очиститься стек функций

* Ты предлогаешь что на время пока твой файл будет грузиться, все должно не двигаться и ждать окончания загрузки? Смысл?

7thsky™ 08.09.2005 16:31

+ вообще хелп рулит, поиск тоже рулит, там это описанно и переписанно

beginnerflasher2005 08.09.2005 16:54

Это все хорошо - переход на следующие кадры, стеки и т.д.
Но с другой-то стороны зачем мне нужны эти следующие кадры, когда переменная "не с тем значением".

Хорошо, вот я в справке то и посмотрел:
-"Обработчик события onData наступает при получении данных, вызванных методами loadVariables или loadMovie ". А почему же не работает вышеприведенный код с onData. Или обработчик не может выполниться пока идет код в кадре? Если так, то значит loadVariables не ждет загрузки, а обработчик ждет,

beginnerflasher2005 08.09.2005 17:08

Цитата:

Сообщение от 3dmax
Я так уже много сделал и все работает. :cool:

А почему у тебя название файла и переменной одинаковые, не запутаешься? ;)

Спасибо, работает такой способ.
Не, не запутаюсь - тестовый кусочек кода.

beginnerflasher2005 08.09.2005 17:24

Ребята, а почему такой вариант "не катит":

loadVariables("rr.txt", "");
while (rr==undefined) {};

7thsky™ 08.09.2005 17:30

попробуй осмыслить мои посты? ты пытаешься зациклить код во фрайме, тогда когда он не должен зацикливаться. через 15 сек, флэш даст ошибку, что код исполняется слишком долго.

3dmax 08.09.2005 17:32

Слыш 7thsky™ ты лучше напиши как оно должно выглядеть :cool:

beginnerflasher2005 08.09.2005 17:37

неужеле за 15 сек нельзя с винта загрузить переменную??????!!!!!!!!!

beginnerflasher2005 08.09.2005 18:02

Ну фиг с ним, пусть идет выполнение кадра. Так значит следующий кадр не начнется пока код текущего на выполнится.

А почему же если в первый кадр вставить

loadVariables("rr.txt", "");

а во второй

trace(rr);
stop();

то всеравно переменная "undefined"

3dmax 08.09.2005 18:05

а ты каким кодом это делаешь?

beginnerflasher2005 08.09.2005 18:10

Просто делаю всего 2 ключевых кадра.

В первый вписываю :
loadVariables("rr.txt", "");

во второй:
trace(rr);
stop();

7thsky™ 08.09.2005 18:20

Где моддераторы только?! что трудно в хелпе посмотреть?

__onLoad = function (flag) {
if (flag) {
// загрузилось
nextAction ();
} else {
// ошибка в загрузке
} // end if
}


var lv:LoadVars = new LoadVars ();
lv.onLoad = __onLoad;
lv.load ('rr.txt');
nextAction = function () {
trace (lv.rr);
}

beginnerflasher2005 08.09.2005 18:35

В справке хоть написано, что load - метод асинхронный
Значит весь остальной код кадра ты прадлагаешь запихать в "nextAction"?
Как-то не очень красиво и удобно.

7thsky™ 09.09.2005 01:44

Ну наконец то, хоть хелп открыл. прочитал, какой метод? асинхронный? о чем это говорит, этом что запустил команду загрузки какого то файла, и не дожидаясь загрузки пошел дальше работать, если пользоваться объектом LoadVars, то у этого объекта есть события onLoad, onData, которые тебе скажут что уже загрузилось, в nextAction ты можешь запихнуть переход на какой нить кадр или вызвать call ('TCallLabel'), если ты любишь код по кадрам распихивать, как тебе удобно

З.Ы. не изобретай велосипед, есть флэш и он работает ТАК, есть плюсы и есть минусы

beginnerflasher2005 09.09.2005 18:24

Понимаешь, весь код хотел написать в одном кадре. Логика достаточно разветвленная. Предполагалось переодически проверять не изменилась ли переменная в файле. Теперь не знаю как "это все разрулить".

7thsky™ 09.09.2005 19:22

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

FreeLander 29.08.2006 20:05

Цитата:

Сообщение от RuLeXXX
супер-супер гууд!

о чём это ты, парень?


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

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