PDA

Просмотр полной версии : Помогите с загрузкой переменных из TXT


superivan
13.11.2006, 08:54
Помогите пожалуйста. Месяц мучаюсь. Только не смейтесь над моей проблемой и не отсылайте в поиск. Я уже в Вашем форуме давно ищу ответ на этот вопрос. Слепил из чего нашел, но ничего не работает :((
У меня мувик с 5-ю рисунками, на каждый рисунок по 2 инфо.
Проблема в следующем... Вот код

_root.onEnterFrame=function(){
loadVariables("images.txt", "_root");
for (k=1; k<=5; k++) {
duplicateMovieClip("lol", "m"+k, k);
}
art1=a0+a1; //1
art2=a0+a2; //2
art3=a0+a3; //3
art4=a0+a4; //4
art5=a0+a5; //5
loadMovie(a1+"/tn.jpg","m1");
loadMovie(a2+"/tn.jpg", "m2");
loadMovie(a3+"/tn.jpg", "m3");
loadMovie(a4+"/tn.jpg", "m4");
loadMovie(a5+"/tn.jpg", "m5");
}

В images.txt находятся переменные представленные в виде
&ar=K01&a1=10.01.00&n1&Белый& и т.д.
В данном случае грузиться текст нормально в свои поля, но рисунки в мувики незагружаются, если убрать _root.onEnterFrame=function() то рисунки грузяться а текст нет.
Помогите! Могу выслать исходник если надо

silin
13.11.2006, 09:40
никто не будет смеяться, но форум такой же НАШ как и ТВОЙ..
надо полагать, что ты знаешь: onEnterFrame вызывается на каждом такте.., скажи для начала: зачем в ней loadVariables

superivan
13.11.2006, 09:50
У меня просто море разных папок из которых грузяться рисунки, для упрощения мне надо чтобы название папки задавалось в txt.
А для того чтобы передать переменную из txt и нужно LoadVariables
А как сделать иначе? Я никогда незадумывался о загрузке из txt
Если неощабаюсь, то мне нужна сначала проверка на загрузку переменных, а потом их использование.
Все работает локально нормально без строчки 1, вот только при сложении переменных отображается 0
loadMovie(a1+"/tn.jpg","m1"); - Это с переменной тоже неработает. Я пологаю из-за того, что данные еще не загрузились. Так?
onEnterFrame вызывается на каждом такте
В смысле на каждом такте?

Double
13.11.2006, 10:06
мрак!
во-первых, пользуйся тегом code.
во-вторых, зачем тебе onEnterFrame?
в-третьих, непонятна структура файла данных.

Double
13.11.2006, 10:12
зачем же одинаковые темы в разных разделах плодить?

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

superivan
13.11.2006, 10:16
во-первых, я неумею пользоваться тегои code
во-вторых, без onEnterFrame переменные незагружаються, точнее операции с ними не делаются
в-третьих, что там непонатного? n1=Белый (опечатка)

superivan
13.11.2006, 10:19
Сори, за то что в двух местах. Я сначала не тот раздел выбрал
Если stop (); ставлю такт обрывается? При добавлении этой команды незаметил изменений
Народ. Адрес исходника www.bynom.ru/flash.rar (40kb)
Я не прошу его сделать за меня! Я прошу указать мою ошибку! Как сделать чтобы идея работала. Взглянув на исходник вы быстро сориентируетесь, т.к. он из одного фрейма и код в начале я вам выложил весь. Просто увидите структуру каталагов и файлов с которыми работает мувик. Мне надо в этом разобраться, т.к. я делаю сайт фирме полностью во флеше.

silin
13.11.2006, 10:40
>>Если stop (); ставлю такт обрывается
ты на нас не смеешься ?

superivan
13.11.2006, 10:50
В смысле?

Double
13.11.2006, 11:37
1. в начале кода напиши code в квадратных скобках. в конце /code тем же макаром.
2. onEnterFrame используется в случае, если нужно что-то делать каждый такт.
3. используй конструкцию
myXML = new XML();
myXML("datafile.txt");
myXML.onData = function(str) {...}
так ты не начнёшь работать с переменными до их подгрузки.
4. про опечатки: ага, а я, блин, провидец, да?

superivan
13.11.2006, 14:21
1. Понял, учту :)
2. ---
3. Если я использую эту конструкцию, то вообще ничего не грузится :(
4. :) Сори! Я не думал что это будет звучать так резко

superivan
13.11.2006, 14:37
А мы ободном и том же говорим. Может я неправильно выразился?
Мне надо создать шаблон, в котором все изменения вносятся через текстовый файл.
В файле:
1. Артикул(он же название папки) - Используется в текстовом поле как артикул, а также вставляется в адрес к картинке и ссылке. Пытаюсь вставить методом

loadMovie(a1+"/tn.jpg","m1");

и методом (на кнопке)

on (release) {
getURL(a1+"/index.html", "_blank");
}

где а1 - название папки (например 10.01.00)
tn.jpg - стандартное наименование рисунка
m1 - мувик в который грузится рисунок
index.html - стандартное наименование страницы
Проблема в том, что как ссылку для index.html он адрес видит, а для рисунка нет :(

2. В другое текстовое поле грузится надпись из 2-х переменных

art1=a0+a1;

Проблема в том, что они складываются только при команде onEnterFrame, я не могу ничем ее заменить, ничего не получается. При этой команде рисунки соответственно в мувик негрузятся, т.к. переменные вне функции несуществуют

Все это прописано в 1 фрейме

Так понятнее моя проблема?

Double
13.11.2006, 16:59
хех, ну не с точностью до буквы надо было конструкцию использовать :)
имя дата-файла своё поставь. и в onData обрабатывай данные, полученые в str. loadMovie тоже использовать не надо. Лучше юзать MovieClipLoader, у него есть onLoadComplete. Вообще нужно взять за правило контролировать асинхронные процессы. Тогда не будет потом удивлений а-ля "почему работает через раз" или "через ж.." ;)

superivan
14.11.2006, 14:39
Спасибо, я попробовал твой метод с myXML, но ничего не произошло, данные вообще негрузяться
Чтобы не путаться я упростил все
Файлы в папке:
all.swf - сам мувик
all.txt - файл с данными
10.01.00tn - рисунок
Теперь мой код это всего 4 строчки
loadVariables("all.txt",_root);
art=a0+a;
loadMovie(a+"tn.jpg",lol);
stop();
lol - название пустого мувика, в который загружается рисунок
Данные грузятся из all.txt. Его вид следующий
&a0=K01.&a=10.01.00&n=Wait&
Переменная n сразу грузится в Dynamik Text с var n, с ней никаких проблем
При всем этом получаю следующее
www.bynom.ru/test/1.jpg
а должно при загрузке сразу быть
www.bynom.ru/test/2.jpg
Если вставить кнопку, то все работает :( Но мне нужна автоматическая загрузка при старте
Кнопка имеет код
on (release) {
gotoAndPlay(2);
}
При этом просто происходит переход на 2 фрейм в котором ничего нет и обратно в 1 фрейм
Можете посмотреть тут www.bynom.ru/test/all.html , при нажатии на черный квадрат, появляется нужный результат

Double
15.11.2006, 13:52
а если потрейсить загруженные переменные перед загрузкой картинки? трейсятся? а что такое "a0"?

superivan
15.11.2006, 14:25
a0 - это переменная, нужна для полного составления артикула продукции.(см. содержание ТХТ)
Потрейсить? Обьясни

pkfun
15.11.2006, 17:43
15783
Пожалуйста. Кажется я понял вашу мысль. Файл new.fla У вас там был установлен AS1 в настройках. Я поменял на AS2 и плеер поставил 8.

Уважаемые знатоки! Не смог не испоьзовать eval в данном случае. :( Как от него здесь избавиться-то?


var mn:MovieClip = this;
var pc:MovieClip;
var i:Number = 0;
var m:Number = 0;
var info1;
var info2;
//
var mc_loader:MovieClipLoader = new MovieClipLoader();
var mc_listener:Object = new Object();
mc_loader.addListener(mc_listener);
mc_listener.onLoadComplete = function():Void {
if (i == 5) {
mc_loader.removeListener(mc_listener);
delete mc_loader;
}
};
//
var v_loader:LoadVars = new LoadVars();
v_loader.onLoad = function(sucsess:Boolean) {
if (sucsess == true) {
for (k=1; k<=5; k++) {
building(23+m, 1);
m = m+120;
}
}
};
//
function building(bX:Number, bY:Number):Void {
i++;
mc = mn.attachMovie('picBlock', 'picBlock'+i, mn.getNextHighestDepth(), {_x:bX, _y:bY});
info1 = eval('v_loader.a'+i);
info2 = eval('v_loader.n'+i);
mc.info1.text = v_loader.a0+info1;
mc.info2.text = info2;
pc = mc.createEmptyMovieClip('pc'+i, mc.getNextHighestDepth());
pc._x = 25;
pc._y = 60;
mc_loader.loadClip(info1+'/tn'+i+'.jpg', pc);
}
//
v_loader.load("images1.txt");

superivan
16.11.2006, 10:19
Не работает :(
Если использую ActionScript 2 выдает следующую ошибку:
**Error** C:\Documents and Settings\Сергей Иванович\Local Settings\Application
Data\Macromedia\Flash 8\en\Configuration\Classes\FP8\TextField\StyleSheet.as: Line 7: The
name of this class, 'TextField.StyleSheet', conflicts with the name of another class that was
loaded, 'TextField.StyleSheet'.
{

Total ActionScript Errors: 1 Reported Errors: 1
У меня даже директории Classes нету. Купил еще одну версию Macromedia Flash 8, тоже нету :( Что делать?
А можно как-нибудь средствами ActionScript 1?

pkfun
16.11.2006, 10:58
У вас восьмой плеер установлен в системе? Попробуйте в настроках выбрать седьмой плеер. Хотя... Папка Classes должна быть!! Без нее ничего работать не будет! Там высшие классы и восьмого и седьмого flash лежат и еще много чего.
Вы в систему входите как администратор?

superivan
16.11.2006, 11:13
Установлен 8 плеер
Да, я в систему вхожу как администратор. Видимо у нас в Новосибирске только резанные Flash 8 продают :(
СПАСИБО всем за участие!!! У меня все зароботало :), хотя ошибка неизчезла :(
Вот код:

var loader:LoadVars=new LoadVars();
loader.onLoad=function(){
art1=this.a0+this.a;
name1=this.n;
loadMovie(this.a+"tn.jpg",lol);
}
loader.load("all.txt");

Самое интересное, что это все, он очень короткий :)

pkfun
16.11.2006, 13:46
Небольшой вопрос.
edit>preferences>ActionScript>ActionScript2 settings...
Какие пути у вас там прописаны?

И еще, выложите пожалуйста исправленный исходник. Хочется поглядеть, как вам удалось решить эту проблему. :)

superivan
16.11.2006, 14:43
Того исходника уже нет :( Он был просто для того чтобы разобраться
Выложу исходник работающий по этой схеме, но немного другой(больше переменных), знаю что там нужен был масив, но сделал просто тупо, а исправлять некогда. Работает и ладно
www.bynom.ru/flash.rar (90 kb) - тут полностью структура файлов
Зайди через 1-2 недели по адресу www.bynom.ru Он будет полностью из Flash. Для него и надо было мне разобраться с загрузкой :)