PDA

Просмотр полной версии : объекты, мувиклипы и loadVariables


wallride
01.07.2003, 17:09
допустим, мы имеем файл "load.txt", содержащий следующее:
variable=F@CKIN' variable

Допустим, делаем мы в AS следующее:
_root.createEmptyMovieClip("clip",1);
loadVariables("load.txt", "_root.clip");

на каком-то дальнем кадре пишем:
trace (_root.clip.variable);

Результат:
undefined

... хотя в дебаггере все переменные есть.
Однако, всёё будет работать, если писать так:
trace ( eval("_root.clip.variable") );
но такой выход неудобен.


Ещё... Вместо мувиклипа я раньше пытался создавать объект. Но в объект переменные не грузятся, что очень плачевно.

Ещё... Если я в файле пишу variable=blah&ar[1]=2.5&ar[2]=5.3 то получаю в дебаггере следующее:
variable="blah"
ar[1]=2.5
ar[2]=5.3

Казалось бы всё сработало, НО ar - это, выходит, не массив, а ПЕРЕМЕННЫЕ, содержащие символы [ и ].
----------------------------------------------------------------------------
А теперь вопросы к почтенной публике:

Что это за фигня? Почему loadVariables так криво работает???
Что это всё значит и как с этим бороться?

Geniot
01.07.2003, 18:12
Привет, классные вопросы. Я и сам с таким сталкивался.
Итак, по порядку:
1. Вероятно, слова clip или variable были зарезервированы и поэтому не работало. Я написал следующий код

_root.createEmptyMovieClip("myclip", 1);
loadVariables("load.txt", "_root.myclip");
mybutt.onRelease = function() {
trace(_root.myclip.myvariable);
};

mybutt - так я назвал кнопку, нажав на которую, получаешь переменную в трейсе.
В файле load.txt я поменял название переменной на myvariable.

2. Массивы так не передашь. Во всяком случае есть спец. инструменты, которые позволяют передавать сложные объекты, я где-то читал, но ты лучше сам поищи.
Предлагаю самопальный вариант передачи массивов:
предположим, что в пхп или ещё где, переменные будут выдаваться не в виде ar[1], ar[2] и т.д. а ar1, ar2 - думаю устроить это будет несложно. Тогда в ас:

Arr = new Array();
i=1;
while (_root.myclip["ar"+i]!=undefined){
Arr[i] = _root.myclip["ar"+i];
++i;
}
Вобщем можно написать функцию, которая переводит переменные в массив.

--------------------------------------------------------------
Работает действительно криво. Подозреваю, что в следующей версии можно будет напрямую коннектиться к MySQL или ещё к какой базе данных, можно будет передавать массивы и другие и объекты напрямую, потому что необходимость в этом уже давно назрела. Не каждый может позволить себе выучить заодно и пхп. В этом смысле джавовские апплеты обогнали флэш на лет 5, но по графике флэш по-прежнему на первом месте в интернете.

wallride
01.07.2003, 18:30
Спасибо за ответ.

На счёт того, что те слова зарезервированы - это не так. В моём проекте вообще другие названия, которые ну никак не могут быть зарезервированы. ;) Но если всё работает исключительно по нажатию кнопки, то это просто издевательство над личностью ;)

Далее. На счёт того, чтобы писать массивы как "array_1" - это я знаю. Таким макаром делаются двух- (и более) -мерные массивы.


Технология, связывающая флэш с сервером уже есть. Flash Remote. Позволяет передавать сложные объекты. Работает по протоколу SOAP, если не ошибаюсь. Главное, что не по HTTP. ;)

Но, блин, я пытался разобраться с этой технологией, и пришёл к выводу, что я лучше разработаю свой модуль. ;)
Во-первых хостинг не найдёшь под этот ремоут, а во-вторых там всё очень сложно и заморочено.

Nox Noctis
01.07.2003, 19:22
интересно, сколько тысяч таких вопросов уже лежит в форуме... http://demonscity.combats.ru/i/smile/shuffle.gif

1. если грузишь - надо ДОЖДАТЬСЯ пока загрузится.
это - дао выраженное словами.

2. из текстового файла грузятся ТОЛЬКО строки. никаких объектов.

и третее -
посмотри по форуму способы грузить данные из текстового файла при помощи XML.load и XML.onData... поможет.