Просмотр полной версии : странное поведение loadVariables
beginnerflasher2005
08.09.2005, 12:43
Создаем клип, добавляем динамический текст и связываем его с переменной 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 - то, наверное, я хочу сейчас прочитать значения переменных, а не когда получится.
А выходит, что значение переменной поменяется в непредсказуемое время, когда вовсе уже и не надо (код выполняется дальше).
Смысл?!...
Я с этой проблемой столкнулся давно и мне предлжили такой вариант,
короче попробуй так:
loadVariables("rr.txt", "");
this.onEnterFrame=function()
{ if(rr) { //пока rr не станет чем-то, тоесть загрузится
trace(rr)
delete this.onEnterFrame;
}}
stop();
Я так уже много сделал и все работает. :cool:
А почему у тебя название файла и переменной одинаковые, не запутаешься? ;)
Смысл в том:
* Флэш timeline based, то есть привязка исполняемого сейчас кода к кадру, то есть кадр не кончиться и не перейдет на другой пока не очиститься стек функций
* Ты предлогаешь что на время пока твой файл будет грузиться, все должно не двигаться и ждать окончания загрузки? Смысл?
+ вообще хелп рулит, поиск тоже рулит, там это описанно и переписанно
beginnerflasher2005
08.09.2005, 16:54
Это все хорошо - переход на следующие кадры, стеки и т.д.
Но с другой-то стороны зачем мне нужны эти следующие кадры, когда переменная "не с тем значением".
Хорошо, вот я в справке то и посмотрел:
-"Обработчик события onData наступает при получении данных, вызванных методами loadVariables или loadMovie ". А почему же не работает вышеприведенный код с onData. Или обработчик не может выполниться пока идет код в кадре? Если так, то значит loadVariables не ждет загрузки, а обработчик ждет,
beginnerflasher2005
08.09.2005, 17:08
Я так уже много сделал и все работает. :cool:
А почему у тебя название файла и переменной одинаковые, не запутаешься? ;)
Спасибо, работает такой способ.
Не, не запутаюсь - тестовый кусочек кода.
beginnerflasher2005
08.09.2005, 17:24
Ребята, а почему такой вариант "не катит":
loadVariables("rr.txt", "");
while (rr==undefined) {};
попробуй осмыслить мои посты? ты пытаешься зациклить код во фрайме, тогда когда он не должен зацикливаться. через 15 сек, флэш даст ошибку, что код исполняется слишком долго.
Слыш 7thsky™ ты лучше напиши как оно должно выглядеть :cool:
beginnerflasher2005
08.09.2005, 17:37
неужеле за 15 сек нельзя с винта загрузить переменную??????!!!!!!!!!
beginnerflasher2005
08.09.2005, 18:02
Ну фиг с ним, пусть идет выполнение кадра. Так значит следующий кадр не начнется пока код текущего на выполнится.
А почему же если в первый кадр вставить
loadVariables("rr.txt", "");
а во второй
trace(rr);
stop();
то всеравно переменная "undefined"
а ты каким кодом это делаешь?
beginnerflasher2005
08.09.2005, 18:10
Просто делаю всего 2 ключевых кадра.
В первый вписываю :
loadVariables("rr.txt", "");
во второй:
trace(rr);
stop();
Где моддераторы только?! что трудно в хелпе посмотреть?
__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"?
Как-то не очень красиво и удобно.
Ну наконец то, хоть хелп открыл. прочитал, какой метод? асинхронный? о чем это говорит, этом что запустил команду загрузки какого то файла, и не дожидаясь загрузки пошел дальше работать, если пользоваться объектом LoadVars, то у этого объекта есть события onLoad, onData, которые тебе скажут что уже загрузилось, в nextAction ты можешь запихнуть переход на какой нить кадр или вызвать call ('TCallLabel'), если ты любишь код по кадрам распихивать, как тебе удобно
З.Ы. не изобретай велосипед, есть флэш и он работает ТАК, есть плюсы и есть минусы
beginnerflasher2005
09.09.2005, 18:24
Понимаешь, весь код хотел написать в одном кадре. Логика достаточно разветвленная. Предполагалось переодически проверять не изменилась ли переменная в файле. Теперь не знаю как "это все разрулить".
не важно насколько развлетленная логика, ее запросто можно реализовать в одном кадре, собственно любой нормальный программист так и делает
FreeLander
29.08.2006, 20:05
супер-супер гууд!о чём это ты, парень?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.