Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   MOUSE_OVER срабатывает на тексте но не на Sprite или Shape (http://www.flasher.ru/forum/showthread.php?t=183116)

MINASTIS 12.08.2012 21:59

MOUSE_OVER срабатывает на тексте но не на Sprite или Shape
 
С помощью addChild я добавляю два элемента в кнопку. TextField и Shape. Первое для надписи на кнопке, второе естественно, для формы.
Код AS3:

                        buttonBody.addChild(buttonShape);
                        buttonBody.addChild(buttonTextField);
addChild(buttonBody);

Сначала я добавляю форму, а после текст, чтобы по индексу текст было видно.
Теперь, если добавить листенер buttonBody, который активирует парочку твинов (один из которых передвигает все текстовое поле влево), то он почему-то считается, что MOUSE_OVER и MOUSE_OUT должен реагировать именно на текстовое поле.

То есть, оставив мышку там, где было текстовое поле до твина, и куда оно возвращается после MOUSE_OUT, можно зациклить событие (откатился текст - прикатился текст).
В чем может быть дело? Если какие части кода нужны, кину, я просто думаю, может я не знаю о каких-то особых свойствах addChild-а, глубины(индекса) и т.д., которые дают такой странный косяк.

Кстати, суть в том что на buttonShape листенер вообще не реагирует. Хотя он там, за текстовым полем виднеется! Как так, если оба элемента находятся в buttonBody и на весь buttonBody повешен листенер?

illuzor 12.08.2012 22:27

Начнём с того, что Shape вообще не генерирует события мыши.
Если хотите, чтоб спрайт под текстовым полем реагировал на мышь, отключите обработку событий мыши у текстфилда.
tf.mouseEnabled = false;

Цитата:

я не знаю о каких-то особых свойствах addChild
addChild() - это метод. У него нет событий и свойств(за исключением свойств класса Function)

Wolsh 12.08.2012 22:46

Код AS3:

buttonBody.mouseChildren = false;


MINASTIS 12.08.2012 22:54

Спасибо, помогло! :)
Главная моя ошибка была в том, что я пытался на Shape повесить листенер, когда надо было на спрайт.
И еще текст, конечно) Спасибо.

caseyryan 12.08.2012 23:01

Вместо MOUSE_OVER и MOUSE_OUT в большинстве случаев лучше использовать ROLL_OVER и ROLL_OUT

zerAlex2 13.08.2012 22:00

Обычно делаю строки:
Код AS3:

this.mouseEnabled=false;
this.mouseChildren=false;
this.mouseEnabled=false;


caseyryan 13.08.2012 22:37

Зачем?
И зачем mouseEnabled назначается дважды?

MINASTIS 13.08.2012 22:38

Я сделал mouseEnabled = false а после создал полностью прозрачный спрайт для области нажатия :) Скукожилась ли кнопка от программной анимации или текст выглянул из-за фона кнопки, область нажатия все та же, что мне очень помогло.

alatar 14.08.2012 00:54

Для этого у спрайта есть свойство hitArea.

zerAlex2 18.08.2012 00:40

Очепятка

Koopa 18.08.2012 00:53

Может проще разобраться с focus или addChildAt?

MINASTIS 18.08.2012 01:25

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

Koopa 22.08.2012 00:11

проще слушетеля повесить на контейнер, а не на элементы внутри.

MINASTIS 22.08.2012 00:25

Тут-то и срабатывает "заикание".
Если его повесить на контейнер, чья форма состоит из кнопки и текста, причем кнопка скукоживатся по высоте по Твину, при ROLL_OVER - то случается вот что:
если направить мышку на край контейнера, он начнет "скукоживать" твином свою высоту. Скукоживая, он становится меньше и уходит из-под курсора мышки. Что происходит дальше? Кнопка начинает расширяться, т.к. считает, что настало время ROLL_OUT. Расширается и тут же сразу встречает снова курсор, который все так же стоит на краю всей формы. Все повторяется до бесконечности, пока курсор мыши не убрать с формы контейнера вообще, или не поставить туда, где форма контейнера есть всегда (например ширина то твином не трогается, поставить курсор посередине по высоте и куда угодно по ширине)

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

Объяснил странно, но многие 100% с такими проблемами сталкивались, делая тоже динамически изменяющую форму кнопку в коде, с нуля.

Koopa 24.08.2012 21:30

А как вы представляете действия пользователя? Он должен мышь фокусировать на уменьшающейся кнопке?


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

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