Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Примитивный вопрос. ActionScript 3.0 и TextField (http://www.flasher.ru/forum/showthread.php?t=145251)

biosid 02.10.2010 16:34

Примитивный вопрос. ActionScript 3.0 и TextField
 
По всем руководствам AS3 не рекомендуют писать код прям во флеше, а в .as - файле.
Пытаюсь себе переучить так, но вот на самом старте у меня не получается мелочь, которая держит дальнейшее развитие.
Задача такая, у меня на сцене есть текстовое поле dynamic типа, которое вставлено через графический интерфейс, а не программно. Так вот как мне к такому полю обращаться из разных классов в файлах .as? Получилось напрямую только из основного класса обратиться, а этого не достаточно.
Прошу помощи.

vinch 02.10.2010 17:06

Код AS3:

sprite.getChildByName("name") as TextField

Где sprite - контейнер текстового поля, name - instance name (задается в Flash CSx).

biosid 02.10.2010 17:14

Спасибо, но вот на счёт sprite не понял. Если у меня лежит просто на главной сцене - это root, чтоли?

i.o. 02.10.2010 17:37

да, root

biosid 03.10.2010 02:33

Не получилось.
Основной файл:
Код AS3:

package {
        import flash.display.*;
 
        public class Main extends Sprite {
 
                public function Main() {
                        Message("text");
                }
        }
}

Код файла Message.as
Код AS3:

package {
        import flash.text.TextField;
        public function Message(t:String):void{
                var d:TextField = getChildByName("text_field") as TextField;
                d.text = t;
        }
}

Выдаёт:
1120: Access of undefined property root.
Если убрать root, то выдаёт:
1180: Call to a possibly undefined method getChildByName.

Подскажите как правильно.

Wolsh 03.10.2010 15:52

Навряд ли у функции Message есть дети, родители, контейнеры, стейджы, руты ;) Это же не дисплейный объект.
Если уж так сильно хочется заморочиться такой глобальной функцией, ей надо как-то передать ссылку на текстовое поле. Или "положить" эту ссылку в такое место, где функция сможет ее взять. Например, сделать в Main-классе статический геттер, возвращающий ссылку на текстовое поле, и импортировать класс Main в ваш пакет с функцией.
Код AS3:

package {
    import flash.display.Sprite;
        import flash.text.TextField;
 
    public class Main extends Sprite {
        private  static var _txf:TextField;
        public function Main() {
            _txf = getChildByName("text_field") as TextField;
            message("text");
        }
        public static function get txf():TextField {
            return _txf;
        }
    }
}

Код AS3:

package {
    import Main;
    public function message(t:String):void{
        Main.txf.text = t;
    }
}

И с каких это пор функции называют с большой буквы?

biosid 04.10.2010 00:34

Цитата:

Сообщение от Wolsh (Сообщение 940521)
И с каких это пор функции называют с большой буквы?

да это из-за постоянного переписывания кода, до этого это был метод класса Message
:umnik2:


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

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