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

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

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

Регистрация: Feb 2009
Сообщений: 30
По умолчанию Class, MovieClip, SimpleButton. Не срабатывает обработчик MouseEvent.CLICK

Присоединяю к классу клип, в котором 2 кадра. В кадрах - кнопки. В зависимости от значения некой переменной frame, происходит выбор кадра:

Код AS3:
addChild(dialBox);
dialBox.gotoAndStop(frame);
И в первом кадре, и во втором есть кнопка cancel_btn. Разница во внешнем виде только. Но по совершенно непонятной мне причине, кнопка не реагирует на событие нажатия мыши.

Код AS3:
dialBox.cancel_btn.addEventListener(MouseEvent.CLICK, onCancelHandler);
Как будто бы оно не происходит. Спрашиваю обработчик: что такое dialBox.cancel_btn? Отвечает: simpleButton. То есть, кнопка точно видна скрипту.

Уже голова почти разбита об стену - не понимаю, отчего это может быть. Перепробовала все вариации: называла кнопки в разных кадрах по-разному, добавляла стоп-кадры, даже удаляла кнопку из первого кадра, оставив только во втором... Ничто не помогло. Единственное, что понятно: если кадр один, тогда все отлично работает. Итого получается, что проблема в gotoAndStop(). Но какая может быть проблема в этом элементарном действии?..

Еще такой момент: кроме кнопки cancel_btn в этих кадрах есть и ok_btn. С этой кнопкой все в порядке. Разница между ok и cancel кнопками в том, что кнопка ok_btn в обоих кадрах одна и та же. По идее, этот факт должен исключить влияние на проблему метода gotoAndStop(), который сейчас главный подозреваемый... но какая проблема может быть другая?

Кто-нибудь, по возможности, просветите меня в этом вопросе. Буду весьма-весьма признательна.

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

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
может быть событие срабатывает не на этой кнопке, а на другом объекте клипа? Попробуйте
Код AS3:
dialBox.addEventListener(MouseEvent.CLICK, onCancelHandler);
А в onCancelHandler через отладчик посмотрите на event.target

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Скорее всего тут дело вот в чем: Flash IDE генерирует поля класса, которые ссылаются на объекты дисплей-листа: это сделано для удобства. И вот поменяв кадр у клипа поле класса не затронется никак: и оно будет продолжать ссылаться на клип в первом кадре. Нужно доставать содержимое методами, для доставания контента.
Попробуйте вот так:
Код AS3:
addChild(dialBox);
dialBox.gotoAndStop(2);
(dialBox.getChildByName("cancel_btn") as SimpleButton).addEventListener(MouseEvent.CLICK, onClick);

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

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Цитата:
Спрашиваю обработчик: что такое dialBox.cancel_btn? Отвечает: simpleButton
Цитата:
Код AS3:
dialBox.getChildByName("cancel_btn") as SimpleButton
Какой смысл?

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

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Обращаясь вот так: clip.cancel_btn мы будем ссылаться на некоторое поле cancel_btn, которое будет указывать всегда в одно место. Если мы вызовем gotoAndStop, скорее всего, это поле значения не изменит и будет до сих пор ссылаться в прошлый первый кадр.

Старый 23.11.2011, 01:26
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 6  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
может проще сделать?

поменять
Код AS3:
      dialBox.cancel_btn.addEventListener(MouseEvent.CLICK, onCancelHandler);
на

Код AS3:
      dialBox.addEventListener(MouseEvent.CLICK, onCancelHandler);

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

Регистрация: Aug 2011
Адрес: 56° 51' с.ш. 53° 13' в.д.
Сообщений: 172
Записей в блоге: 1
Ну собственно да, я это и предложил - даже если не поможет, то хоть можно будет увидеть на каком объекте срабатывает клик.

Тигра - я имел ввиду зачем надо "as SimpleButton", если ИДЕ итак знает что это кнопка (судя по словам топикстартера)

Старый 23.11.2011, 01:45
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 8  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
и ещё: во втором кадре экземпляр кнопки имеет тоже имя "cancel_bnt" (instance name)? это так - на всякий случай

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

Регистрация: Feb 2009
Сообщений: 30
Код AS3:
dialBox.addEventListener(MouseEvent.CLICK, onCancelHandler);
Клик срабатывает куда не кликни, event.target возвращает правильный объект.

А логичный и обнадеживающий код:
Код AS3:
(dialBox.getChildByName("cancel_btn") as SimpleButton).addEventListener(MouseEvent.CLICK, onClick);
сообщает об ошибке:
Код:
Error #1009: Cannot access a property or method of a null object reference.
Эта ошибка и раньше иногда вылетала. Мол, вы пытаетесь присвоить метод несуществующему объекту. А иногда не вылетала - объект SimpleButton чудесным образом находился. Но почему-то вот не реагировал на нажатие мыши.

Печаль сплошная Это же, кажется, такая элементарщина - передвинуться на заданный кадр!
Думаю, ребята, если еще какая-нибудь идея на эту тему блеснет, скорее всего она будет рабочей

Добавлено через 5 минут
Цитата:
и ещё: во втором кадре экземпляр кнопки имеет тоже имя "cancel_bnt"
Да, имя кнопки в обоих кадрах - cancel_btn. Но варианты с разными именами уже испробованы.

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

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

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

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

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

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


 


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


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