05 апреля 2012

Flash: баг с отключением мышиных сообщений

Встав сегодня утром, я решил добавить логотип спонсора в свою последнюю игру. В голове я прикинул, что на всю работу у меня должно уйти пара часов, затем я планировал написать демку на Delphi+GlScene по анимированным кнопкам. Уже прошло полдня, злость подступает к горлу, а даже основной логотип спонсора в главном меню не реагирует на сообщения мыши. Справиться с такой ситуацией обычно помогаем такой способ: рассказываем в подробностях кому-нибудь о сложившейся проблеме. В это время обычно происходит переклинивание мозга и должно бы придти оригинальное решение бага. Попробую!
Исходные данные: имеется логотип, который лежит на заднем плане
Задача: необходимо отловить нажатие на логотип спонсора и перебросить игрока на определенный портал
Проблема: логотип перекрыт прозрачными частями картинок, из-за чего не реагирует на мышь

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

mouseEnabled = false;
mouseChildren = false;

Вторая строка отключает сообщения и у вложенных объектов.
В общем, что я только не отключал уже - и сообщения у самой картинки, и от ее родительского объекта и т.д... Все равно при клике на кнопке спонсора, которая перекрыта статической картинкой, сообщения мыши не приходят до логотипа...



(спустя десять минут)
Ура! Помогло! Потрясающий метод! Работает!
Оказывается, нужно было отключить mouseEnabled у всех родительских объектов. То есть я прошелся по иерархии вверх до разветвления к логотипу спонсора. Сейчас я не могу сказать, почему именно так все это сработало, возможно как-нибудь разберусь точнее и обязательно отпишусь...
Спасибо за помощь всем читателям!

p.s. Пока искал, как побороть эту проблему, наткнулся на еще одну интересную особенность... Если у кнопки создать свечение (Filters->Glow), то хит-область кнопки станет равной области из первого кадра. То есть у меня в кадре Hit кнопки был нарисован большой прямоугольник, но из-за того, что на саму кнопку наложен эффект свечения, данный прямоугольник игнорировался. Вот такой интересный баг удалось найти и пофиксить.

добавил пару картинок из игры... лого в меню и лого в игровом уровне:

Сообщения, схожие по тематике: