Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.10.2010, 16:34
biosid вне форума Посмотреть профиль Отправить личное сообщение для biosid Найти все сообщения от biosid
  № 1  
Ответить с цитированием
biosid

Регистрация: Mar 2006
Сообщений: 17
По умолчанию Примитивный вопрос. ActionScript 3.0 и TextField

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

Старый 02.10.2010, 17:06
vinch вне форума Посмотреть профиль Отправить личное сообщение для vinch Найти все сообщения от vinch
  № 2  
Ответить с цитированием
vinch

Регистрация: Feb 2010
Сообщений: 95
Код AS3:
sprite.getChildByName("name") as TextField
Где sprite - контейнер текстового поля, name - instance name (задается в Flash CSx).

Старый 02.10.2010, 17:14
biosid вне форума Посмотреть профиль Отправить личное сообщение для biosid Найти все сообщения от biosid
  № 3  
Ответить с цитированием
biosid

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

Старый 02.10.2010, 17:37
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
да, root

Старый 03.10.2010, 02:33
biosid вне форума Посмотреть профиль Отправить личное сообщение для biosid Найти все сообщения от biosid
  № 5  
Ответить с цитированием
biosid

Регистрация: Mar 2006
Сообщений: 17
Не получилось.
Основной файл:
Код 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.

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

Старый 03.10.2010, 15:52
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Навряд ли у функции 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;
    }
}
И с каких это пор функции называют с большой буквы?
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 03.10.2010 в 15:56.
Старый 04.10.2010, 00:34
biosid вне форума Посмотреть профиль Отправить личное сообщение для biosid Найти все сообщения от biosid
  № 7  
Ответить с цитированием
biosid

Регистрация: Mar 2006
Сообщений: 17
Цитата:
Сообщение от Wolsh Посмотреть сообщение
И с каких это пор функции называют с большой буквы?
да это из-за постоянного переписывания кода, до этого это был метод класса Message

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:20.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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