![]() |
Class, MovieClip, SimpleButton. Не срабатывает обработчик MouseEvent.CLICK
Присоединяю к классу клип, в котором 2 кадра. В кадрах - кнопки. В зависимости от значения некой переменной frame, происходит выбор кадра:
Код AS3:
Код AS3:
Уже голова почти разбита об стену - не понимаю, отчего это может быть. Перепробовала все вариации: называла кнопки в разных кадрах по-разному, добавляла стоп-кадры, даже удаляла кнопку из первого кадра, оставив только во втором... Ничто не помогло. Единственное, что понятно: если кадр один, тогда все отлично работает. Итого получается, что проблема в gotoAndStop(). Но какая может быть проблема в этом элементарном действии?.. Еще такой момент: кроме кнопки cancel_btn в этих кадрах есть и ok_btn. С этой кнопкой все в порядке. Разница между ok и cancel кнопками в том, что кнопка ok_btn в обоих кадрах одна и та же. По идее, этот факт должен исключить влияние на проблему метода gotoAndStop(), который сейчас главный подозреваемый... но какая проблема может быть другая? Кто-нибудь, по возможности, просветите меня в этом вопросе. Буду весьма-весьма признательна. |
может быть событие срабатывает не на этой кнопке, а на другом объекте клипа? Попробуйте
Код AS3:
|
Скорее всего тут дело вот в чем: Flash IDE генерирует поля класса, которые ссылаются на объекты дисплей-листа: это сделано для удобства. И вот поменяв кадр у клипа поле класса не затронется никак: и оно будет продолжать ссылаться на клип в первом кадре. Нужно доставать содержимое методами, для доставания контента.
Попробуйте вот так: Код AS3:
|
Цитата:
Цитата:
|
Обращаясь вот так: clip.cancel_btn мы будем ссылаться на некоторое поле cancel_btn, которое будет указывать всегда в одно место. Если мы вызовем gotoAndStop, скорее всего, это поле значения не изменит и будет до сих пор ссылаться в прошлый первый кадр.
|
может проще сделать?
поменять Код AS3:
Код AS3:
|
Ну собственно да, я это и предложил - даже если не поможет, то хоть можно будет увидеть на каком объекте срабатывает клик.
Тигра - я имел ввиду зачем надо "as SimpleButton", если ИДЕ итак знает что это кнопка (судя по словам топикстартера) |
и ещё: во втором кадре экземпляр кнопки имеет тоже имя "cancel_bnt" (instance name)? это так - на всякий случай
|
Код AS3:
А логичный и обнадеживающий код: Код AS3:
Код:
Error #1009: Cannot access a property or method of a null object reference.Печаль сплошная :) Это же, кажется, такая элементарщина - передвинуться на заданный кадр! Думаю, ребята, если еще какая-нибудь идея на эту тему блеснет, скорее всего она будет рабочей :) Добавлено через 5 минут Цитата:
|
Цитата:
Мне одному кажется, что программировать в кадрах перестали 6 лет назад? |
Весь код во внешнем as-файле - в классе, собственно. В кадрах у меня кнопки.
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Вы имена протрейсите, а не тип. Тип-то понятно что один. Трейсите target.name и currentTarget.name, авось узнаете что-то для себя интересное.
|
ничего нового. Кнопка распознается. Тем не менее, к ней самой нельзя приладить событие.
Но задачу решить надо, поэтому обошлось так: Код AS3:
И всё же, интересно было бы всё-таки узнать, откуда это "слепое пятно" взялось. Поэтому, если у кого появится ответ на первоначальный вопрос, тому аплодисменты :) Всем спасибо! |
Хм. А какое же тогда имя у кнопки в другом кадре?
Цитата:
|
Цитата:
@Автор: ну, например Вы можете создать самый минималистичный пример, при котором баг воспроизводится и выложить сюда. Вам сразу скажут, что не так: а то это гадание на картах, что же произошло. |
Вложений: 1
Да, вы правы. Вот пример.
_LANG - переменная, которая принимает значениях "ru" или "eng". В зависимости от _LANG осуществляется переход к кадру diagBox'a. В этом примере в кадре "ru" как раз и вылетает ошибка, мол, "cancel_btn у вас null". |
Это старый баг 9-го флешплеера. Соберите под 10-й и будет вам счастье.
Чтобы понять, что за баг - добавьте после dailBox.gotoAndStop такой вот код: Код AS3:
Цитата:
Добавлено через 51 секунду Соответственно при сборке под 10-й трейс будет вот таким: Цитата:
|
По-моему, причина в том, что мувик после вызова gotoandstop/play не имеет доступа к его чилдам (особенность 9флеша, крезиуан прав). Т.е. если есть hero с двумя кадрами "stay" и "staywithgun" и вызывался gotoandstop("staywithgun") из "stay", то флеш не может вызвать символ gun на кадре "staywithgun" внутри hero. Для этого нужно чтобы прошел 1 кадр, только после этого hero уже имеет доступ к чилдам (hero.gun и тд).
|
Таки вы правы, crazyone!! В десятом плеере всё отлично.
Спасибо вам, человеческое Большое! |
| Часовой пояс GMT +4, время: 17:01. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.