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

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

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

Регистрация: Nov 2009
Сообщений: 5
По умолчанию Как правильно связать символ с классом AS?

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

в мануале от adobe не нашел возможных причин того, почему класс не находится.
файл с классом лежит в той же директории, что и fla, включен в проект.
код файлика:

Код AS1/AS2:
package
{
  public class textButton extends flash.display.SimpleButton
  {
  }
}

Старый 15.11.2009, 23:38
laliqui вне форума Посмотреть профиль Отправить личное сообщение для laliqui Найти все сообщения от laliqui
  № 2  
Ответить с цитированием
laliqui

Регистрация: Nov 2008
Адрес: раша, сибирь, водка, медведь
Сообщений: 8
Код AS3:
package
{
  //импортировать расширяюший класс
  import flash.display.SimpleButton
//классы называть с большой буквы, расширяющего класса - просто имя
  public class TextButton extends SimpleButton
  {
//метод-конструктор класса, вызывается автоматически
	  public function TextButton() {
//в вашей кнопке текстовое поле textField
		textField.text = "Просто текст"		
	}
  }
}
и не забыть в самой кнопке прописать этот класс в linkage как TextButton

Старый 16.11.2009, 20:30
Praetorian вне форума Посмотреть профиль Отправить личное сообщение для Praetorian Найти все сообщения от Praetorian
  № 3  
Ответить с цитированием
Praetorian

Регистрация: Nov 2009
Сообщений: 5
Ок. Спасибо
Проблема все равно оставалась, но разрешилась, когда я заново создал файл и заново написал в нем код...
Вроде как класс он нашел.
Но, когда в диалоге linkage я нажимаю зеленую галочку "подтвердить описание класса",
выдается сообщение: определение класса не найдено в файле "C:\....\TextButton.as"
Имя файла относительно .fla main\TextButton.as
Код AS1/AS2:
package main
{
	import flash.display.SimpleButton;
	public class TextButton extends flash.display.SimpleButton
	{
		public function TextButton()
		{
			//txtClub.text = "asdasd";
		}
	}
}
В linkage он прописан как main.TextButton.
Подскажите, что еще я не так сделал?)
и кстати, видимо по этой же причине (что flash не смог связать символ с объектом)
при раскомментаривании закомментаренной строчки, при запуске компилятор ругается, что поле не объявлено - хотя в символе оно есть, и именно с таким ид.

Старый 16.11.2009, 20:33
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,600
Записей в блоге: 17
getChildByName

Старый 16.11.2009, 20:39
laliqui вне форума Посмотреть профиль Отправить личное сообщение для laliqui Найти все сообщения от laliqui
  № 5  
Ответить с цитированием
laliqui

Регистрация: Nov 2008
Адрес: раша, сибирь, водка, медведь
Сообщений: 8
Пакет можно и не обзывать, а то тогда он обязан у вас лежать в папке майн, как-то так...

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

Код AS3:
 import flash.text.TextField;
лучше всего, чтобы не было путаницы, создать папку Classes и туда складывать свои классы, а в свойствах документа (ActionScript3.0->Settings) прописать classpath путь к этой папке: ./Classes
пакеты тогда обзывать не нужно

Старый 16.11.2009, 20:39
Praetorian вне форума Посмотреть профиль Отправить личное сообщение для Praetorian Найти все сообщения от Praetorian
  № 6  
Ответить с цитированием
Praetorian

Регистрация: Nov 2009
Сообщений: 5
небольшой апдейт: переписал код как
Код AS1/AS2:
package main
{
	import flash.display.SimpleButton;
	dynamic public class TextButton extends SimpleButton
	{
		public function TextButton()
		{
			this.txtClub.text = "asdasd";
		}
	}
}
теперь компилируется но во время выполнения выдает следующее:
Код:
ypeError: Error #1010: A term is undefined and has no properties.
	at main::TextButton$iinit()[D:\..\main\TextButton.as:8]
	at flash.display::Sprite/flash.display:Sprite::constructChildren()
Добавлено через 17 минут
Цитата:
Сообщение от laliqui Посмотреть сообщение
Пакет можно и не обзывать, а то тогда он обязан у вас лежать в папке майн, как-то так...

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

Код AS3:
 import flash.text.TextField;
лучше всего, чтобы не было путаницы, создать папку Classes и туда складывать свои классы, а в свойствах документа (ActionScript3.0->Settings) прописать classpath путь к этой папке: ./Classes
пакеты тогда обзывать не нужно
Сделал. Спасибо за ценный совет но ошибка не исчезла. варианты:
1) если написано
Код AS1/AS2:
txtClub.text = "";
Ругается на Undefined Property
2)
Код AS1/AS2:
this.txtClub.text = "";
Падает, потому что найти не может
3)
Код AS1/AS2:
this.getChildByName("txtClub")
выдает ошибку времени выполнения:
Error #1006: getChildByName is not a function.

Старый 16.11.2009, 21:00
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 7  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Отключтиь автоматическое объявление переменных для объектов добаленных на таймлайн - в настройках побликации.
Самому объявить нужную переменную (она должна быть public var с таким же именем, как и то, что вы прописали в instance name).
__________________
Hell is the possibility of sanity

Старый 16.11.2009, 21:00
Praetorian вне форума Посмотреть профиль Отправить личное сообщение для Praetorian Найти все сообщения от Praetorian
  № 8  
Ответить с цитированием
Praetorian

Регистрация: Nov 2009
Сообщений: 5
кстати, txtClub - это просто динамический текст внутри символа "TextButton"

Старый 16.11.2009, 21:04
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 9  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
>> выдает ошибку времени выполнения:
Error #1006: getChildByName is not a function.

Ох, не обратил внимаия... SimpleButton не является DisplayObjectContainer поэтому этого метода у нее нет.
Кроме того, доступа к таймлайну SimpleButton из AS3 нету, вы можете только оперировать стейтами. T.e. скорее всего ваше текстовое поле добавлено к одному из стейтов - трейсите, смотрите, куда вы его добавили
__________________
Hell is the possibility of sanity

Старый 16.11.2009, 21:08
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 10  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Зацените исходники с xml menu на simplebutton как нахождение TextFiled в simplebutton и изменение их
http://www.murmadillo.tut.su/html/xml_menu.swf
http://www.murmadillo.tut.su/html/XML_MENU.rar
http://www.murmadillo.tut.su/html/me...utton-href.xml

и тутор небольшой то-же самое делает
http://www.murmadillo.tut.su/html/me...tton-href.html
должен изменит текст если он на уровне 1 в кнопке, те. над чем-то одном нарисованном
Код AS3:
		private function changeLabel(sim:SimpleButton,_str:String):void{
			((sim.upState as DisplayObjectContainer).getChildAt(1) as TextField).text = _str;
			((sim.downState as DisplayObjectContainer).getChildAt(1) as TextField).text = _str;
			((sim.overState as DisplayObjectContainer).getChildAt(1) as TextField).text = _str;
		}
__________________
Гоночка


Последний раз редактировалось Alex Lexcuk; 16.11.2009 в 21:12.
Создать новую тему Ответ Часовой пояс GMT +4, время: 14:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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