PDA

Просмотр полной версии : Трабл с Object


vatslav
01.08.2003, 02:07
Вопрос:
Есть динамическое поле текста.
В первом кадре, где основной код, я делаю

q = new Object();
q.text = "какой-то текст";
stop();

Для динамического поля задаю variable: q.text

В итоге, в первом кадре в этом динамическом тексте ничего нет. Если отправляюсь в другие кадры, то, как и задумывалось, в этом поле появляется _ какой-то текст _ . Почему же этот текст не появляется в первом кадре и как преодолеть этот трабл? (мне нужно, чтоб именно в первом кадре в поле был нужный текст). Все это происходит во Flash MX.

Спасибо всем, кто отзовется.

TTS
01.08.2003, 03:04
Имя переменной не должно содержать точки и много чего ещё. А то, что ты прописываешь в поле variable - это именно имя переменной. Название, а не определение объекта.

Если хочешь, чтобы текстовое поле принадлежало объекту, созданному динамически, - создавай его динамически с помощью createTextField.

Как обычно, есть, другой вариант - использовать уже имеющийся объект:

Для динамического поля задаешь instance name: q

Все, объект q уже создан. Можно сделать с ним все, что хотел. Напр.:
q.text="какой-то текст";
q.asd="hello!";
q.popup=function(msg){trace(msg)};
q.popup(q.asd);

vatslav
01.08.2003, 04:48
Спасибо за ответ, все работает. Но, все-таки, хотелось бы разобраться: если я в первом кадре вставляю код, который описал, а динамическое поле делаю в каком-то следующем кадре (в первом его нет), instance name ему не присваиваю, переменную задаю q.text, то при переходе в этот следующий кадр — опа! Появляется нужный текст. Если же это динамическое поле есть и в первом кадре, то это не работает. Почему же тогда это работает, если нет поля в первом кадре? Недокументированная возможность, или что?

Пушистик
01.08.2003, 12:46
объекты MovieClip, Button, Mouse, TextField не нужно создавать как новый объект т.к. он создается сразу после компиляции....
я, конечно, понимаю что те хотится поюзать ООП, но здесь оно по-моему не к чему!!!
так что используй переменную:
mytextvar="blablabla";

TTS
01.08.2003, 12:59
По умолчанию твоё текстовое поле имеет instance name "instance1" (если ты не задал другое):

instance1.text="какой-то текст";
trace(instance1.variable); // выдаст "q.text"

Переменная имеет идентификтор "q.text", но как только интерпретатор видит точку, вместо того, чтобы воспринимать "q.text" как единое целое, он ищет объект "q", а внутри него пременную "text". Поэтому из AS в принципе её никак не зацепишь.
В поле variable ты можешь вбить хоть "а+б" или "Math.sin(3.14)", и переменная так и будет называться, но если в скрипте написать:
Math.sin(3.14)="какой-то текст";
угадай, что скажет интерпретатор.

Твой случай - баг, фича - называй как хочешь. Отрабатывает (почему-то) так, как хотелось, но только в момент появления ткст поля на сцене.
Интересно будет поковыряться, может что-нить прикольное придумается.

Useless
01.08.2003, 14:02
this["Math.sin(3.14)"] = "wow";
trace(this["Math.sin(3.14)"]);

vatslav
01.08.2003, 20:20
Еще вот что заметил — если присваивать имя переменной динамического поля q.text, и поставить галку на "форматирование тегами HTML" то текст выводится корректно (не считая указанного в теме трабла), исправно форматируется. Если же присваивать динамическому полю instance name: q, variable: text, то на эту галку нет реакции, т.е. видны все теги.

2 Пушистик
я, конечно, понимаю что те хотится поюзать ООП, но здесь оно по-моему не к чему!!!
Так я же не весь код привожу :)