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

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

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

Регистрация: May 2008
Сообщений: 102
Post Проблема доступа к объектом в кадрах

Начальные условия:

Есть мувик с 4мя кадрами - кнопка, а кадры это состояния - нормальное, наведенная, нажатая, залоченая

в каждом кадре есть объект TextField с именем "buttonText" (получается всего 4 объекта с одинаковыми именами)

для этой кнопки есть базовый класс в котором прописан переход на нужный кадр при событиях мыши.

При этом базовый класс не знает ничего про объекты TextField
ибо их может и не быть вообще на кнопке

в базовом классе есть функция локализации этих текстовых полей:

Код AS3:
public function Translate(translation:String = ""):void
		{
			if (translation != "")
				buttonTranslation = translation;
			if ( this.hasOwnProperty("buttonText") && (this["buttonText"] is TextField) )
					this["buttonText"].text = buttonTranslation;
		}
а применяется так:
Код AS3:
		public function onMouseUp(event:MouseEvent):void
		{
			this.gotoAndStop(2);
			Translate();
		}
То есть я перехожу в какой-то кадр и меняю в нем текст в текстовом поле.

Проблема:
в IDE работает все, а в собранной версии нет.
this.hasOwnProperty("buttonText") возвращает true
а по this["buttonText"] - null

как правильно к этим объектам обращаться?
Как вообще правильно к объектам обращаться при перемещении по кадрам?

Подумал что из-за одинаковых имен проблема - поменял - в каждом кадре разные и для каждого кадра писал соответствующий кусок кода - не помогло.

Заранее спасибо


Последний раз редактировалось ekeeper; 30.04.2009 в 14:13.
Старый 30.04.2009, 14:15
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 2  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Код AS3:
(this.getChildByName("buttonText") as TextField).text = "123";
__________________
Griver

Старый 30.04.2009, 15:02
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 3  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от mre Посмотреть сообщение
Код AS3:
(this.getChildByName("buttonText") as TextField).text = "123";
Код AS3:
		public function Translate(translation:String = ""):void
		{
			if ( this.hasOwnProperty("buttonText"))
				(this.getChildByName("buttonText") as TextField).text = "123";
		}
результат:

Код:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
	at System::AdvancedButton/Translate()
	at System::AdvancedButton/onMouseOver()
Не работает

Старый 30.04.2009, 15:12
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 4  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Значит нету там buttonText.
Вообще Ваш подход не очень грамотный.
Лучше вынести текстовое поле из клипа, ведь Вы его меняете программно, зачем оно в каждом кадре, пусть лежит поверх клипа.
То есть, в кнопке будет 2 объекта: TextField и MovieClip, и будете ими манипулировать.
__________________
Griver

Старый 30.04.2009, 15:36
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 5  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Цитата:
Сообщение от mre Посмотреть сообщение
Значит нету там buttonText.
Вообще Ваш подход не очень грамотный.
Лучше вынести текстовое поле из клипа, ведь Вы его меняете программно, зачем оно в каждом кадре, пусть лежит поверх клипа.
То есть, в кнопке будет 2 объекта: TextField и MovieClip, и будете ими манипулировать.
Раз нет, то почему тогда условие if ( this.hasOwnProperty("buttonText")) срабатывает?

Сейчас вынесу - но - в нажатом состоянии надо двигать надпись на один пиксель вниз. Надо подумать как это лучше сделать

Старый 30.04.2009, 15:51
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
Сообщение от ekeeper Посмотреть сообщение
Раз нет, то почему тогда условие if ( this.hasOwnProperty("buttonText")) срабатывает? :
Это ни о чем не говорит
Код AS3:
var a:String;
trace (this.hasOwnProperty("a")); // true
//trace (this.a.length);
А теперь расскомментарьте строчку ниже и получите ошибку.
Имя свойства есть, а значения нет.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.04.2009, 15:55
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 7  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Ну проблема осталось. В 3м кадре надо сменить координаты текстового поля - а это значит отдельный кадр. Как только делаю отдельный кадр - все - достучатся до поля не могу

Старый 30.04.2009, 15:59
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Цитата:
При этом базовый класс не знает ничего про объекты TextField
ибо их может и не быть вообще на кнопке
Сделайте подкласс.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 30.04.2009, 16:54
mre вне форума Посмотреть профиль Отправить личное сообщение для mre Посетить домашнюю страницу mre Найти все сообщения от mre
  № 9  
Ответить с цитированием
mre
 
Аватар для mre

Регистрация: Jul 2007
Адрес: Москва
Сообщений: 996
Запомните одну вещь.
Таймлайн нужно использовать только для анимации, которую нельзя или трудоемко сделать программно. Сместить TextField, это что, трудоемко?
А для анимации в серьезных проектах, иногда, не используют MovieClip, а пишут кастомный класс для покадровой растровой анимации, потому что быстрее работает.
__________________
Griver

Старый 30.04.2009, 17:48
ekeeper вне форума Посмотреть профиль Отправить личное сообщение для ekeeper Найти все сообщения от ekeeper
  № 10  
Ответить с цитированием
ekeeper

Регистрация: May 2008
Сообщений: 102
Спасибо за помощь

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

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

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


 


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


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