![]() |
Обратится к тестовому полю
Есть текстовое поле с Instance name did_field
В AS2 обращался Код AS1/AS2:
Так не работает Код AS3:
Цитата:
|
getChildByName("name")
|
Не работает, потому что в классе MovieClip не определено свойство did_field, о чём вам и говорит компилятор.
Как быть? Отключить автоматическое объявление stage instances. Написать Document Class, в котором определить публичную переменную с тем же именем, что вы задали полю (пусть будет txt). Обращаться (root as ИмяВашегоDocumentClass).txt.text = 'текст'. Сразу оговорюсь, это не лучший вариант. Во-первых, чуть лучше будет определить в Document Class метод, изменяющий содержимое поля. А, во-вторых, ещё лучше будет уйти от привязки к root, т.к. в рельных проектах она только мешает (да и в тестовых тоже не советовал бы её использовать). Добавлено через 54 секунды Цитата:
|
ИМХО (я спец еще тот):
Если Вы все пишете в кадрах, то я думаю root вообще не нужен. Подключите библитеку: Код AS3:
Код AS3:
Код AS3:
Код AS3:
|
Цитата:
Код AS3:
|
Цитата:
|
А почему тут должна быть ошибка компиляции?)
Я, наверное, был неправ, не упомянув тот факт, что пример в своём предыдущем посте я привёл исходя из того, что текстовое поле будет создано динамически (в конструкторе, например). Если оставить поле на рабочем столе, то будет ошибка исполнения. Цитата:
Сеттер никому и ничего не должен, даже вам :D Во-вторых, здесь значение присваивается не текстовому полю, а его свойству text. К тому же, чем вам did_field не переменная?) Ну, и в третьих, сеттер, как и геттер – по сути те же методы, и доступ к закрытым переменным своего класса имеют не менее, чем методы. |
Код AS3:
Код AS3:
Код AS3:
А если подключить класс то код в кадрах писать нельзя? А как обращаться к классу из клиппа |
Код в кадрах писать можно, но нежелательно, если вы хотите делать что-нибудь более-менее серъёзное.
Классы подключать очень просто. Попробуйте: Код AS3:
К экземпляру класса обращаться можно, как к любой другой переменной (точнее, любая переменная во флеше на самом деле хранит ссылку на экземпляр какого-то класса, будь то String, MovieClip или TextField). Однако важно помнить, что для доступа к членам класса (свойствам и методам) переменная, хранящая ссылку на экземпляр, должна быть нужного типа. Например, определим класс ColorRect: Код AS3:
Код AS3:
Если же мы теперь вместо var colorRect:ColorRect напишем var colorRect:Sprite, то возникнет ошибка в строчке colorRect.fillBy(0x7285D1). Почему именно там? До этого всё будет нормально, так как ColorRect является потомком Sprite, и мы можем присвоить его переменной типа Sprite. Также можно пользоваться свойствами x, y, width и height, которые класс Sprite унаследовал от DisplayObject. А вот метод fillBy() в классе Sprite не определён, мы ведь его определили только в ColorRect. Поэтому, если объявить переменную как Sprite, то этот метод вызвать не удастся, несмотря на то, что он публичный. Однако можно в этом случае привести тип переменной: (colorRect as ColorRect).fillBy(0x7285D1), и всё пройдёт удачно, так как переменная colorRect на самом деле хранит экземпляр класса ColorRect. Именно поэтому у вас и возникала ошибка с текстовым полем. Флеш при компиляции создаст класс, являющийся наследником DisplayObject, в котором будет свойство did_field типа TextField, так как вы добавили текстовое поле с этим именем на сцену. Экземпляром этого класса и будет являться объект root. Но к объекту в памяти мы можем обратиться только через переменную. А переменная (свойство) DisplayObject.root имеет тип DisplayObject, в котором свойство did_field не определено. Отсюда ошибка. |
Смотрю на все это дело и голова оху.......... :eek:
Гора кода для того что бы просто вывести текст на экран Ладно сейчас поробуем |
| Часовой пояс GMT +4, время: 04:45. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.