Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Загрузка переменных.
Flash Zone Forum > Macromedia Flash > ActionScript
Auron
Добрый день.
Такая вот проблемка: имеется кучка переменных во внешнем источнике (в данном случае txt - файл). Переменные применяются при соблюдении конкретных условий, а вот тут и заковыка.

Делаю следующее: есть txt - файл с подсказками и папка с изображениями.
Задача:При выполнении определенных условий в мувиклип подгружается определенное изображение и завязанная на него справка (комментарий)
картинки и определители справки проиндексированны. т.е. изображения имеют имена btnLeft1.png, btnLeft2.png, btnLeft3.png и т.д., комментарии находятся в одном txt - файле и присваиваются к переменным соответственно hlp1, hlp2, hlp3, и т.д.
Короче все через числовой суффикс.
теперь код по определению принадлежности - собственно счетчик

CODE
var q:String=btnOneLeft; //вот тут то и непонятки по команде trace (q) выдает 1 например как положенно, но при сравнении с переменной i не определяет т.е неравнство не срабатывает и цикл идет до остановки.
//Цикл по выборке состава кнопки1
for(var i:Number=1;i<>q;++i){
if (i>=1000) {
break; // команда заканчивает выполнение цикла
}
}
this.clip_btn1.img_btn1.loadMovie("Images/btn"+i+".png");

а теперь проблема №2 если в имя картинки суффикс встраивается без проблем, то при попытке комбинирования имени переменной (допустим hlp1 не получаеся -как обойти эту проблему?
CODE
on (rollOver) {
this._parent.message.text = this._parent."hlp"+i;
this._parent.hlp.gotoAndStop(1);


}
tiHo
дарова.

давай сначала попробую пояснить про вторую проблему, а потом разберусь с первой и тебе допишу.
так вот, ты там указываеш "+i" а ведь цикла то там нету. аткуда флешка знаеш что за i ты хош вставить.
да, еще коешто: непиши ты код на кнопки! неудобно самому потом будет разбираться. пусть все будет в кадре. и тебе объяснять будет проще.

PS> ди и в первом примере у тебя загрузка картинок идет уже после прохождения цикла. а нужно в нем.

да, еще коешто:

операция <> придумана для flash player 2 ) и ясно что сейчас она немножко устарела. используй <= в данном случае.

так вот, насчет первой проблемы, измени код на такой:

Код
var q:String = btnOneLeft;
for (var i = 1; i <= q; ++i)
{
    if (i >= 1000)
    {
        break;
    }
    else
    {
        this.clip_btn1.img_btn1.loadMovie("Images/btn" + i + ".png");
    }
}


да и вообще както запутано.. smile.gif

теперь, странно но у меня .png не грузятся.. флешка 7(mx2004pr)

далее во второй проблеме попробуй так:

Код
on (rollOver) {
    this._parent.message.text = this._parent["hlp"+i]
    this._parent.hlp.gotoAndStop(1);

}


а вообще я еще напишу свою версию данной задачи smile.gif возможно даже сегодня
Auron
Цитата
PS> ди и в первом примере у тебя загрузка картинок идет уже после прохождения цикла. а нужно в нем.

как раз в нем мне и не нужно потому что если выполнять загрузку в цикле он будет перегружать картинки в мувик пока не найде нужную - а мне этого не надо - трафик жрать будет ужасно. да эта часть кода меня устраивает и она работае ведь i остается как переменная.
Цитата
так вот, ты там указываеш "+i" а ведь цикла то там нету. аткуда флешка знаеш что за i ты хош вставить.

флешка понимает что за i я хочу вставить. ведь i объявленная переменная.
проблема в от в этом участке:
CODE
var q:String = btnOneLeft;
for (var i = 1; i <= q; ++i)

даже при условии что содержимое переменной btnOneLeft равно допустим 3, при переборе скрипт пропустит i <= q и пойдет дальше пока не остановится командой break (собственно поэтомуя ее и вставил). А вот если я переменную гружу не из внешнего источника а ручками забью например так: for (var i = 1; i <= 3; ++i) то код сработает как положенно, поэтому измышляю я что проблема в предоставлении переменной а вот конкретно как ее решить не знаю.
tiHo
ну может проблема в том что ты дал переменной q тип String, а в цикле могут быть только Number wink.gif
Auron
пробовал и Number и String - все одно не выходит каменный цветок
PS у меня flash8
Действительно похоже на то, что AS распознает переменную как String - любые м математические действия приводят к результату NaN. Но задаю, тоя Number.
tiHo
Код
var q:String = btnOneLeft;


какой Number?? невидиш разве что String? и неважно что за тип переменной btnOneLeft. q это btnOneLeft переведенная в строку. тоесть если btnOneLeft было 5, то q равна "5", что уже нельзя использовать в цикле.
Auron
Код
var q:Number = btnOneLeft;


даже в таком предоставлении - не работает, но я по моему дотюкал почему я пытался применить эту переменную в мувике, а ее похоже можно только в {}.
tiHo
самое время показать исходник
Auron
нет... опять ничего не выходит как только я объявляю что переменная Number - сразу выводит NaN sad.gif
tiHo
исходник в студию! можеш залить на sharing.ru
Auron
http://www.sharing.ru/dl/053377/problema.rar.html - исходник, пароль 121212
tiHo
во первых в етой строчке:

Код
message.text = ["hlpBtnLeft" + i];

флешка к строке прибаляет число. но всеравно будет строка, поетому при наведении видно hlpbtnLeft1000

нужно сделать
Код
message.text = this["hlpBtnLeft" + i]

чтобы воспринимало как переменную.

во вторых, мозг у меня не работает. потерпи до завтра. зделаю тебе свою версию.
Auron
жду с нетерпением
tiHo
я бы сделал так:

Нажмите для просмотра прикрепленного файла

надеюсь ето то что надо, потому што больше ничего писать нехочется smile.gif
Auron
что то я скачать не могу, не пускает
tiHo
да елки палки что за дела! чтото с форумом. никто скачать не может..

качай от сюда: http://www.sharing.ru/dl/053474/testloadvars.zip.html

пасс: flashzoneru
Auron
пароль?
Auron
спасибою пойду применять ))
tiHo
давай, удачи
Auron
такая вот ж..а гружу твой файл - все работает. Создаю чистый пустой свой копирую в него все из твоего сохраняю (перебиваю пути и все такое) - и.... пременная мах при попытке математических действий (я проверяю trace (max-1)); выдает опять NaN тогда как в твоей версии как положено 0. Я не понимаю. sad.gif
tiHo
я хз в чем дело.
копируй сюда код.
Auron
нашел!!!! Вся ж...а заключается в текстовом файле. попробовал оставить ссылку на товй файл -заработало. Скажи в какой кодировке надо сохранять я сохранял в юникоде. Извини за мороку. Ламер я ишо всего 5 дней с AS вожусь.
tiHo
я же вроде в исходнике написал что нужно в utf-8
Auron
спасибо. попробую. а вот строчка которая закомментена -я ее раскоментил - результата нет.
Помоему пивом я уже не отделаюсь rolleyes.gif
tiHo
вообщем строчка нужна, если файл в другой кодировки(отличной от utf-8). если utf-8 то строчку можеш удалить.
PS> пиво не пью. wink.gif
Auron
рискну достать еще разок, с ламерским вопросом - в каой проге можно сохранить txt файл в UTF-8 кодировке?
tiHo
Блокнот. слышал такую? biggrin.gif

када жмеш Сохранить как... в низу под полем куда писать имя файла, есть выбор кодировки.
Auron
в блокноте тока rts, ms-dos и юникод и все
tiHo
а у меня вот так:

ну попробуй тогда через wordpad (тоже стандартная в win)
Auron
ни в том ни в другом нету UTF-8. Сохранил через IE там есть. здается мне что у меня на буке жопа какаято с кодировкой, точно на компе стационаррном есть, а на буке нет. Извиняюсь.
tiHo
все, вопросов более нету? smile.gif
Auron
пока нету, мы этот аж на 2 страницы растянули
tiHo
лан, тему закрывать не буду. может еще вопросы будут. да и вообще, закрытые темы - вчерашний день. smile.gif
Auron
Привет, ну вот и созрел новый вопросик!
Тема такая, сделал я резиновую флешку все там резинится, пружинится - просто круть... дошел до публикации и начались грабли.., резинится то мой мувик в плеере, а вот в браузере нет - есть лекарство?
ЗЫ И еще такое дело в мувике mu1.swf каждые полчаса проигрывается звук .Wav, приаттаченный из библиотеки - с этим ясно и понятно, но этот мувик я подгружаю в другой допустим в mu2.swf - так вот уже будучи загруженным в mu2.swf клип mu1.swf звук не проигрывает (я экспериментировал с подгружаемым из вне mp3 все ровно а вот с wav приаттаченным из библиотеки никак не хочет.
tiHo
для каждого нового вопросика не связанного с текущей темой, создается новая тема в которой он обсуждается. делается ето для удобства поиска пользователями ответов. врятли пользователь будет искать ответы в теме "загрузка переменных" если не понятно о подгружаемых звуках.

Создай отдельную тему(даже может две, о загрузки wav, и о резине), а перед этим попробуй посматри через наш поиск, может тема уже обсуждалась(вроде про резину уже говорили и не раз.)
Auron
вновь привет всем Гуру AS. Вопрос по теме:
При загрузке переменных в мувик, а потом при использовании их в виде ссылки на загружаемый файл (любой), компилятьр выдает "Error opening URL - "путь к файлу""
В чем траблы? Расчесал репу до лысины - не догоню.
Код прилагаю:
CODE
function loadMovies(target, Path, textPath) {
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = {};
loader.addListener(listener);
loader.loadClip(Path, target);
//
listener.onLoadStart = function():Void {
textPath.text = "0 % загружено.";
};
listener.onLoadError = function(clip:MovieClip, message:String):Void {
if (message == "URLNotFound") {
textPath.text = "Ссылка не найдена.";
}
if (message == "LoadNeverCompleted") {
textPath.text = "Ошибка загрузки.";
}
};
listener.onLoadProgress = function(clip:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
textPath.text = Math.round(bytesLoaded/bytesTotal*100)+" % загружено.";
};
listener.onLoadComplete = function():Void {
textPath.text = "";
};
}



function LoadVar(bs) {
var localvar:LoadVars = new LoadVars();
localvar.onLoad = function(success:Boolean) {
obj = new Object();
obj.RealLocation = "";
obj.RealLocation = localvar.RealLocation;

};
localvar.load(bs);
}

this.btn1.onPress = function() {
LoadVar("test.txt");
};
this.btn1.onRelease = function() {
loadMovies(_root.as, obj.RealLocation, textPath)

};
// В текстовом файле test.txt запись ссылки на мувик из этой же папки - допустим test.swf

Помогите пож!
MustLive
Цитата
При загрузке переменных в мувик, а потом при использовании их в виде ссылки на загружаемый файл (любой), компилятьр выдает "Error opening URL - "путь к файлу""

Auron

У тебя в коде события this.btn1.onPress и this.btn1.onRelease происходят один за другим мгновенно (за onPress сразу же происходит onRelease). При этом переменные не успевают загрузиться (LoadVar("test.txt") в this.btn1.onPress). Поэтому при вызове loadMovies в this.btn1.onRelease возникает ошибка.

Для решения этой проблемы тебе нужно сделать задержку между вызовами функций LoadVar и loadMovies. Это можно сделать и на таймлайне (по старинке - добавлением промежуточных кадров), но лучше сделать в AS - правильно записать код. Нужно вызов loadMovies задать внутри LoadVar после загрузки переменных:
Код
function LoadVar(bs) {
    var localvar:LoadVars = new LoadVars();
    localvar.onLoad = function(success:Boolean) {
        obj = new Object();
        obj.RealLocation = "";
        obj.RealLocation = localvar.RealLocation;
        loadMovies(_root.as, obj.RealLocation, textPath);
    };
    localvar.load(bs);
}

В данном случае (в onLoad) ты можешь отказаться от obj и сразу вызывать функцию: loadMovies(_root.as, localvar.RealLocation, textPath).
Auron
Спасибо попробую..
Auron
MustLive.- ошибка такая есть, но исправление оной не привело к результату. Даже загруженные переменные (проверяю trace()) перед вставкой в путь загрузки. Как строка читаются, а как путь нет. пишет "Error opening URL - "путь к файлу", где путь к файлу есть моя переменнаяя. то же самое с числами - грузится грузятся, но любые математические действия над ними приводят к ошибку. Вот я думаю не может ли это быть из-за того что переменные записаны как свойства объекта? Или я не прав?
ЗЫ а если прав как их привести в нормальный вид?
ЗЗЫ. Еще один интересный момент - при тестировании (ctrl+Enter),выдает эту ошибку (Error opening URL ), а при публикации в браузер - работает нормально, но с числами и при публикации отказывается работать.
MustLive
Цитата
ЗЫ а если прав как их привести в нормальный вид?

Auron

Используй преобразование типов. Раз как строки загруженные переменные у тебя работают, то перед математическими операциями преобразуй их в нужный тип (например Number).

Цитата
Вот я думаю не может ли это быть из-за того что переменные записаны как свойства объекта?

Это не должно влиять, но в любом случае ты можешь использовать пребразование типа, чтобы принудительно задать нужный тип данных (например String). Да и я же тебе ранее порекомендовал не использовать obj (не создавать этот объект) и сразу вызывать loadMovies(_root.as, localvar.RealLocation, textPath).

Цитата
ЗЗЫ. Еще один интересный момент - при тестировании (ctrl+Enter),выдает эту ошибку (Error opening URL ), а при публикации в браузер - работает нормально, но с числами и при публикации отказывается работать.

В браузере подобные сообщения (Error opening URL) не выводятся. А работать будет одинаково, что в локальном плеере (при тестировании во флеше или в стационарном флеш плеере), что в браузере. Т.е. если напишешь корректный алгоритм, то и будет работать как в флеш плеере, так и в флеш плагине в браузере.

Также сам путь проверь, если он на URL ругается (и удостоверься, чтобы не было кириллических символов в пути).
Auron
Цитата(MustLive @ 16.07.2007 - 17:56) *
Используй преобразование типов. Раз как строки загруженные переменные у тебя работают, то перед математическими операциями преобразуй их в нужный тип (например Number).

преобразую - результат такой же, в плеере по ссылке не идет, в браузере идет. Я понимаю что это невероятно но факт.
Пробовал преобразовывать обьект через toString() безрезультатно.
С числами не работает пробовал преобразовывать в Number.

Цитата(MustLive @ 16.07.2007 - 17:56) *
Да и я же тебе ранее порекомендовал не использовать obj (не создавать этот объект) и сразу вызывать loadMovies(_root.as, localvar.RealLocation, textPath).

Не использовать obj, это выход, но не решение задачи. В моем случае в одном текстовике присутствует 340 переменных которые используются в разные промежутке времени и для разных событий, а не только при нажатии клавиши.
Русская версия IP.Board © 2001-2009 IPS, Inc.