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

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

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

Регистрация: Feb 2009
Сообщений: 30
Весь код во внешнем as-файле - в классе, собственно. В кадрах у меня кнопки.

Старый 23.11.2011, 02:36
Ookami вне форума Посмотреть профиль Отправить личное сообщение для Ookami Найти все сообщения от Ookami
  № 12  
Ответить с цитированием
Ookami
 
Аватар для Ookami

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Цитата:
А логичный и обнадеживающий код:
Код AS3:
(dialBox.getChildByName("cancel_btn") as SimpleButton).addEventListener(MouseEvent.CLICK, onClick);
сообщает об ошибке:
Код:
Error #1009: Cannot access a property or method of a null object reference.
Скорее всего getChildByName("cancel_btn") возвращает null, т.е. у dialBox такого чайлда в момент вызова нет.

Цитата:
Клик срабатывает куда не кликни, event.target возвращает правильный объект.
Ну он и должен везде срабатывать ) Суть как-раз в том чтоб поймат таргет при клике по проблемной кнопке. "Правильный объект" - искомая кнопка?

Старый 23.11.2011, 03:06
AHKHOBA вне форума Посмотреть профиль Отправить личное сообщение для AHKHOBA Найти все сообщения от AHKHOBA
  № 13  
Ответить с цитированием
AHKHOBA

Регистрация: Feb 2009
Сообщений: 30
Цитата:
Скорее всего getChildByName("cancel_btn") возвращает null, т.е. у dialBox такого чайлда в момент вызова нет.
Так и есть. Но по какой причине он null?

Цитата:
Суть как-раз в том чтоб поймат таргет при клике по проблемной кнопке
Обработчик клика правильно называет объекты. Все кнопки - SimpleButto (в т.ч. cancel_btn), сам dialBox - MovieClip. Никаких неожиданностей не обнаружилось.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Вы имена протрейсите, а не тип. Тип-то понятно что один. Трейсите target.name и currentTarget.name, авось узнаете что-то для себя интересное.
__________________
Reality.getBounds(this);

Старый 23.11.2011, 04:33
AHKHOBA вне форума Посмотреть профиль Отправить личное сообщение для AHKHOBA Найти все сообщения от AHKHOBA
  № 15  
Ответить с цитированием
AHKHOBA

Регистрация: Feb 2009
Сообщений: 30
ничего нового. Кнопка распознается. Тем не менее, к ней самой нельзя приладить событие.
Но задачу решить надо, поэтому обошлось так:

Код AS3:
dialBox.addEventListener(MouseEvent.CLICK, onClickHandler);
function onClickHandler(event:MouseEvent):void{
   if(event.target.name == "cancel_btn"){
      trace('yes')
   }
}
Довольно странно, но зато работает.

И всё же, интересно было бы всё-таки узнать, откуда это "слепое пятно" взялось. Поэтому, если у кого появится ответ на первоначальный вопрос, тому аплодисменты

Всем спасибо!


Последний раз редактировалось AHKHOBA; 23.11.2011 в 04:37.
Старый 23.11.2011, 05:27
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 16  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Хм. А какое же тогда имя у кнопки в другом кадре?
Цитата:
Кнопка распознается.
__________________
Reality.getBounds(this);

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Цитата:
Тигра - я имел ввиду зачем надо "as SimpleButton", если ИДЕ итак знает что это кнопка (судя по словам топикстартера)
getChildByName возвращает объект DisplayObject. По идее да, он тоже IEventDispatcher и ему можно кинуть addEventListener, но как-то подписывать его на CLICK не очень, нужно хотя бы привести к InteractiveObject.

@Автор: ну, например Вы можете создать самый минималистичный пример, при котором баг воспроизводится и выложить сюда. Вам сразу скажут, что не так: а то это гадание на картах, что же произошло.

Старый 23.11.2011, 15:01
AHKHOBA вне форума Посмотреть профиль Отправить личное сообщение для AHKHOBA Найти все сообщения от AHKHOBA
  № 18  
Ответить с цитированием
AHKHOBA

Регистрация: Feb 2009
Сообщений: 30
Да, вы правы. Вот пример.
_LANG - переменная, которая принимает значениях "ru" или "eng". В зависимости от _LANG осуществляется переход к кадру diagBox'a.
В этом примере в кадре "ru" как раз и вылетает ошибка, мол, "cancel_btn у вас null".
Вложения
Тип файла: rar cancel_btn.rar (9.4 Кб, 80 просмотров)

Старый 23.11.2011, 16:35
crazyone вне форума Посмотреть профиль Отправить личное сообщение для crazyone Найти все сообщения от crazyone
  № 19  
Ответить с цитированием
crazyone
 
Аватар для crazyone

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Это старый баг 9-го флешплеера. Соберите под 10-й и будет вам счастье.

Чтобы понять, что за баг - добавьте после dailBox.gotoAndStop такой вот код:
Код AS3:
trace(dialBox.numChildren);
			for(var i:int=0;i<dialBox.numChildren;i++){
				trace("Child at "+i);
				trace(dialBox.getChildAt(i));
				trace(dialBox.getChildAt(i).name);
			}
И зацените вывод трейса:
Цитата:
5
Child at 0
[object MovieClip]
instance2
Child at 1
[object Shape]
instance4
Child at 2
[object SimpleButton]
ok_btn
Child at 3
null
Ненавижу 9-й плеер. Он отнял у меня столько времени...

Добавлено через 51 секунду
Соответственно при сборке под 10-й трейс будет вот таким:
Цитата:
5
Child at 0
[object MovieClip]
instance2
Child at 1
[object Shape]
instance4
Child at 2
[object SimpleButton]
ok_btn
Child at 3
[object SimpleButton]
cancel_btn
Child at 4
[object TextField]
instance30

Старый 23.11.2011, 18:38
thirst вне форума Посмотреть профиль Отправить личное сообщение для thirst Найти все сообщения от thirst
  № 20  
Ответить с цитированием
thirst

Регистрация: Aug 2011
Сообщений: 19
По-моему, причина в том, что мувик после вызова gotoandstop/play не имеет доступа к его чилдам (особенность 9флеша, крезиуан прав). Т.е. если есть hero с двумя кадрами "stay" и "staywithgun" и вызывался gotoandstop("staywithgun") из "stay", то флеш не может вызвать символ gun на кадре "staywithgun" внутри hero. Для этого нужно чтобы прошел 1 кадр, только после этого hero уже имеет доступ к чилдам (hero.gun и тд).

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

Теги
class , gotoandstop , MouseEvent , movieclip , SimpleButton
Опции темы
Опции просмотра

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

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


 


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


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