Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   flash не видит переменную (http://www.flasher.ru/forum/showthread.php?t=88629)

HarsH 27.11.2006 16:22

flash не видит переменную
 
Народ, подскажите, ПОЖАЛУЙСТА, почему flash не понимает команду:

Код:


loadVariablesNum ("text.txt",0);
_root.clip21.gotoAndStop(block11);


что неправильно?


P.S. text.txt - текстовый файл с переменными, типа "block11=3&block12=2&block13=5"
clip21 - это мувик с фреймами.

artcraft 27.11.2006 16:34

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

HarsH 27.11.2006 16:37

не в том дело!
почему то в динамических текстовых полях переменная отображается!!!!

artcraft 27.11.2006 16:46

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

pkfun 27.11.2006 16:47

Изучите help по flash по этому вопросу(loadVariablesNum).
Пример из хелпа flash8:
Код:

//
loadVariablesNum("params.txt", 2);
function checkParamsLoaded() {
        if (_level2.done == undefined) {
                trace("not yet.");
        } else {
                trace("finished loading. killing interval.");
                trace("-------------");
                for (i in _level2) {
                        trace(i+": "+_level2[i]);
                }
                trace("-------------");
                clearInterval(param_interval);
        }
}
var param_interval:Number = setInterval(checkParamsLoaded, 100);
//includes the following text
// Params.txt
var1="hello"&var2="goodbye"&done="done"

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

pkfun 27.11.2006 16:52

Цитата:

Сообщение от artcraft
она отображается там уже после загрузки, а gotoAndStop у тебя вызывается до

А где пример-то? А то у меня такое впечатление, что вы знаете больше че я. :)

HarsH 27.11.2006 16:53

то есть, если у меня 64 переменные, то мне надо ждать очеееень долго?

а в текстовых полях моментально все переменные видны...

HarsH 27.11.2006 17:01

вы можете основываясь на моем примере показать решение проблемы?

pkfun 27.11.2006 17:05

Цитата:

Сообщение от HarsH
то есть, если у меня 64 переменные, то мне надо ждать очеееень долго?
а в текстовых полях моментально все переменные видны...

Нет. После загрузки текстового файла сразу станут видны все переменные включенные в этот файл.
А я и не вижу, где пример-то? Где он?:)

artcraft 27.11.2006 17:05

Цитата:

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

Цитата:

а в текстовых полях моментально все переменные видны...
вот этого момента и надо дождаться

Цитата:

Сообщение от pkfun
А где пример-то?

пример в комменте номер 5 :~)

Цитата:

Сообщение от pkfun
А то у меня такое впечатление, что вы знаете больше чем я. :)

возможно

artcraft 27.11.2006 17:09

ой пардон, речь о примере кода -
в динамик текстфилде наверняка просто прописано Var: block11

в комменте номер 5 - решение

artcraft 27.11.2006 17:12

предлагаю радикальное решение :~)
заменить loadVariablesNum на #include

pkfun 27.11.2006 17:27

HarsH
Если не трудно, оформите и прикрепите здесь небольшой исходник, иллюстрирующий вашу проблему. А то так я не могу точно ничего сказать.

Цитата:

Сообщение от artcraft
возможно

:p :D

HarsH 27.11.2006 18:40

Вложений: 1
Вот.
прикрепил.
Надеюсь, Вы поможите.

pkfun 27.11.2006 21:49

Вложений: 1
Посмотрел ваш пример. Решил переделать под AS2 и хотя бы 7 плеер.
Код на главной временной шкале:
Код:

var i:Number = 0;
var j:Number = 0;
var dat:Number = 0;
var mc:MovieClip;
var mn:MovieClip = this;
//
var loader:LoadVars = new LoadVars();
//
loader.onLoad = function(suc:Boolean):Void  {
        if (suc == true) {
                for (i=1; i<9; i++) {
                        for (j=1; j<9; j++) {
                                mc = mn.attachMovie("clip", "clip"+(i*10+j), mn.getNextHighestDepth(), {_x:j*15, _y:i*15});
                                dat = Number(eval('loader.block'+(i*10+j)));
                                mc.gotoAndStop(dat);
                        }
                }
        }
};
//
loader.load("kur.txt");

Замечания к коду:
- загрузку такого рода данных лучше производить классом LoadVars, если вы оформили данные в простом текстовом файле.
- но правильнее будет производить загрузку такого рода данных с помощью XML.
- у вас в текстовом файле не были определены переменные block74-block77. Я их дописал и присвоил значение 1.
Ниже ваш пример, переделанный. Я делал все в восьмерке, но сохранял fla для семерки. Должно нормально открыться. Плеер 7, AS2

etc 28.11.2006 00:59

pkfun, тут как раз необходим Delegate, а не костыли в виде переменной, ссылающейся на this.

pkfun 28.11.2006 01:59

Цитата:

Сообщение от __etc
pkfun, тут как раз необходим Delegate, а не костыли в виде переменной, ссылающейся на this.

Для чего он именно здесь необходим? Я, честно говоря с этим классом/объектом не знаком...
Меня больше беспокоит eval в коде.

etc 28.11.2006 02:03

eval можно убрать, поставив this[…] или loader[…], если использовать Delegate.
Delegate нужен для перенаправления вызова onLoad в метод класса от имени экземпляра класса, чтобы не использовать лишних ссылок из-за потери области видимости этого экземпляра.

pkfun 28.11.2006 02:19

__etc
Код:

dat = loader['block'+(i*10+j)]
Спасибо большое! :yahoo: Ведь знал про свойства объекта, но невнимательно отнесся. Хе-хе, без перевода в Number работает.

ps. Про Delegate почитаю.
pss. Приятно иметь дело со знающим человеком. :)

HarsH 28.11.2006 05:03

не могли бы вы для MX файл сделать...
и SWF

HarsH 28.11.2006 13:44

или объясните, что где как?

pkfun 28.11.2006 18:28

Цитата:

Сообщение от HarsH
не могли бы вы для MX файл сделать...
и SWF

У вас что, файл не открывается? Странно. Я его сохранял для mx2004. Может у вас просто mx?

HarsH 28.11.2006 19:50

да.
не открывается...

pkfun 29.11.2006 12:06

Может быть пора на flash8 переходить? В AS1 я плохо разбираюсь.

HarsH 29.11.2006 15:49

можете объяснить мне разницу между AS1 и AS2?

Всё таки вы не сможете мне помочь?

pkfun 29.11.2006 19:58

Цитата:

Сообщение от HarsH
можете объяснить мне разницу между AS1 и AS2?

В AS2 больше возможностей. Например, та же загрузка переменных организована с помошью специального класса, у которого есть событие, сообщающее об окончании загрузки.
Цитата:

Сообщение от HarsH
Всё таки вы не сможете мне помочь?

Пример который я выложил - прекрасно работает. Я только не понимаю, желание делать на AS1 это принципиально? Или какие-то суровые обстоятельства не позволяют перейти на flash8?

etc 29.11.2006 20:09

pkfun, LoadVars — это не AS2, это просто дополнительный класс. AS2 — возможность создавать свои классы более верным и стандартным путем, а не так, как это можно делать в AS1. Более того, AS2, как языка, вообще не существует — это просто что-то типа интерфейса между ООП и AS1. На выходе, после компиляции, все твои классы превратятся в мувики с #initclip и AS1 кодом внутри.

pkfun 29.11.2006 20:33

Ну это понятно - ООП и т.д. :)
Строго говоря - в флэш есть настройки публикации - AS1 и AS2. В AS1 - LoadVars не работает. Еще в AS1 нельзя сохранять ссылки на мувики в переменных, нельзя остановить интервал обычным способом...
Если AS2 нет, то чего же столько книжек по нему написали? ;)

etc 29.11.2006 20:54

Цитата:

Сообщение от pkfun
В AS1 - LoadVars не работает. Еще в AS1 нельзя сохранять ссылки на мувики в переменных, нельзя остановить интервал обычным способом...

Все вышеперечисленное — неправда ваша.

pkfun 29.11.2006 20:58

Вот на первой странице данного топика есть пример как проверять загрузку. Попробуйте запустить его с параметром публикации AS1. У меня, конечно я убрал определения типа переменных, интервал не останавливается. :)
Либо же параметр публикации AS1 не отражает AS1? Тогда что за разновидность ActoinScript он запускает?

pkfun 29.11.2006 21:00

Цитата:

Сообщение от __etc
Все вышеперечисленное — неправда ваша.

Вполне возможно. Я новичок в флэше.

HarsH 29.11.2006 21:02

у меня нет 8-ого флэша
пришлите свф, пжлста.

pkfun 29.11.2006 21:06

HarsH
Под какой плеер публиковать?

HarsH 29.11.2006 21:08

шестой

etc 29.11.2006 21:19

Цитата:

Сообщение от pkfun
Вот на первой странице данного топика есть пример как проверять загрузку. Попробуйте запустить его с параметром публикации AS1. У меня, конечно я убрал определения типа переменных, интервал не останавливается. :)
Либо же параметр публикации AS1 не отражает AS1? Тогда что за разновидность ActoinScript он запускает?

Прекрасно работает с AS1. Может, какой-нибудь другой пример имелся ввиду? Я взял из поста #5, потому как больше примеров и не было.

Я думаю, что нужно просто понимать, что есть AS1. В AS1 не используется типизация и внешних .as файлов (если это не #include), код пишется в кадрах. Вот, что есть AS1. И, при знании AS2, несколько странно выглядят утверждения насчёт незнания AS1 — сам язык абсолютно тот же, AS2 существует лишь для разработчика, для самого Flash существует AS1 (до восьмой версии включительно, понятное дело) и ничего больше.

HarsH 29.11.2006 21:21

по шагам можете расписать весь порядок действий?

pkfun 29.11.2006 21:30

Что же тогда изменяет переключатель AS в настройках публикации?

pkfun 29.11.2006 21:40

Цитата:

Сообщение от HarsH
шестой

Извините, под шестой не получается. Может кто другой, более осведомленный, поможет вам.

etc 30.11.2006 01:19

pkfun, что делает? Делает невозможным использование своих внешних классов, использование типизации и т.п. Собственно, всё, в массе своей.

HarsH 30.11.2006 08:35

неважно под какой плеер
просто выложите сюда пример.


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

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