![]() |
странное поведение loadVariables
Создаем клип, добавляем динамический текст и связываем его с переменной rr.
В первом кадре вводим: rr=1; this.loadVariables("rr.txt"); trace(rr); Никак не могу понять, что за ерунда такая: trace выдаёт 1 а динам. поле показывает 1 и сразу 2 (в файле прописано rr=2) |
просто процесс загрузки переменных из файла занимает какое-то время, на тот момент, когда ты трэйсишь rr, загрузка ещё не завершилась
|
а как же в этом случае поступать, т.е. продолжить выполнение кода с гарантией что значение изменилось?
|
Пробовал так: - ролик "висит"
f=false; rr=1; this.loadVariables("rr.txt"); while (f==false) {}; trace(rr); onData = function(){ f=true; } |
А вообще, конечно, интересный принцип работы ...
Если я вызвал loadVariables - то, наверное, я хочу сейчас прочитать значения переменных, а не когда получится. А выходит, что значение переменной поменяется в непредсказуемое время, когда вовсе уже и не надо (код выполняется дальше). Смысл?!... |
Я с этой проблемой столкнулся давно и мне предлжили такой вариант,
короче попробуй так: loadVariables("rr.txt", ""); this.onEnterFrame=function() { if(rr) { //пока rr не станет чем-то, тоесть загрузится trace(rr) delete this.onEnterFrame; }} stop(); Я так уже много сделал и все работает. :cool: А почему у тебя название файла и переменной одинаковые, не запутаешься? ;) |
Смысл в том:
* Флэш timeline based, то есть привязка исполняемого сейчас кода к кадру, то есть кадр не кончиться и не перейдет на другой пока не очиститься стек функций * Ты предлогаешь что на время пока твой файл будет грузиться, все должно не двигаться и ждать окончания загрузки? Смысл? |
+ вообще хелп рулит, поиск тоже рулит, там это описанно и переписанно
|
Это все хорошо - переход на следующие кадры, стеки и т.д.
Но с другой-то стороны зачем мне нужны эти следующие кадры, когда переменная "не с тем значением". Хорошо, вот я в справке то и посмотрел: -"Обработчик события onData наступает при получении данных, вызванных методами loadVariables или loadMovie ". А почему же не работает вышеприведенный код с onData. Или обработчик не может выполниться пока идет код в кадре? Если так, то значит loadVariables не ждет загрузки, а обработчик ждет, |
Цитата:
Не, не запутаюсь - тестовый кусочек кода. |
Ребята, а почему такой вариант "не катит":
loadVariables("rr.txt", ""); while (rr==undefined) {}; |
попробуй осмыслить мои посты? ты пытаешься зациклить код во фрайме, тогда когда он не должен зацикливаться. через 15 сек, флэш даст ошибку, что код исполняется слишком долго.
|
Слыш 7thsky™ ты лучше напиши как оно должно выглядеть :cool:
|
неужеле за 15 сек нельзя с винта загрузить переменную??????!!!!!!!!!
|
Ну фиг с ним, пусть идет выполнение кадра. Так значит следующий кадр не начнется пока код текущего на выполнится.
А почему же если в первый кадр вставить loadVariables("rr.txt", ""); а во второй trace(rr); stop(); то всеравно переменная "undefined" |
а ты каким кодом это делаешь?
|
Просто делаю всего 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); } |
В справке хоть написано, что load - метод асинхронный
Значит весь остальной код кадра ты прадлагаешь запихать в "nextAction"? Как-то не очень красиво и удобно. |
Ну наконец то, хоть хелп открыл. прочитал, какой метод? асинхронный? о чем это говорит, этом что запустил команду загрузки какого то файла, и не дожидаясь загрузки пошел дальше работать, если пользоваться объектом LoadVars, то у этого объекта есть события onLoad, onData, которые тебе скажут что уже загрузилось, в nextAction ты можешь запихнуть переход на какой нить кадр или вызвать call ('TCallLabel'), если ты любишь код по кадрам распихивать, как тебе удобно
З.Ы. не изобретай велосипед, есть флэш и он работает ТАК, есть плюсы и есть минусы |
Понимаешь, весь код хотел написать в одном кадре. Логика достаточно разветвленная. Предполагалось переодически проверять не изменилась ли переменная в файле. Теперь не знаю как "это все разрулить".
|
не важно насколько развлетленная логика, ее запросто можно реализовать в одном кадре, собственно любой нормальный программист так и делает
|
Цитата:
|
| Часовой пояс GMT +4, время: 19:55. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.