Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Трабл с Object (http://www.flasher.ru/forum/showthread.php?t=47495)

vatslav 01.08.2003 02:07

Трабл с Object
 
Вопрос:
Есть динамическое поле текста.
В первом кадре, где основной код, я делаю

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 Пушистик
Цитата:

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


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

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