PDA

Просмотр полной версии : Работает со Sprite и не работает с Bitmap


Appleman
13.06.2018, 12:08
Всем привет!

Столкнулся с такой фигнёй. Менеджер тултипов. Регистрирует компонент типа DisplayObject, потом по наведении мыши выводит в нужный слой всплывающую подсказку. До последнего момента запихивал туда образцы собственного класса BitmapIcon (extends Sprite), всё работало прекрасно. Сейчас попробовал засунуть просто Bitmap - тишина. Подсказки не выскакивают.

Уже проверял, всё точно регистрируется. Вот фрагмент кода.

public class Tooltips
{
private var _registeredComponents: Dictionary = new Dictionary(); // Список зарегистрированных компонентов
private var _tooltipArea: Sprite = new Sprite();
private var _tooltipText: TextField = new TextField();

public function registerComponent(component: DisplayObject, description: String = null, orientation: uint = RIGHT) : void
{
if (!description) description = " ";
_registeredComponents[component] = {target: component, description: description, orientation: orientation};
component.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
component.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler);
component.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
trace (CLASS_DEBUG_NAME + "Зарегистрировали компонент " + component + " с текстом " + description);
}

Ради теста запихал в Sprite-оболочку, работает. Где искать причину? Спасибо.

undefined
13.06.2018, 12:15
Bitmap не является потомком InteractiveObject.Твой подход с BitmapIcon изначально был правильным,т.к.Sprite является.

Appleman
13.06.2018, 12:23
undefined, спасибо огромное. Я вчера голову сломал.

RedHead90
13.06.2018, 19:28
Appleman, есть такая потрясающая штука, созданная специально для того, чтобы подобные вопросы не "сломали голову". Прошу любить и жаловать - Справочник по ActionScript® 3.0 для платформы Adobe® Flash® (https://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/index.html)

undefined
13.06.2018, 20:14
да ладно с битмапой известная грабля все на нее рано или поздно наступают.К тому же в хелпе прямого ответа на вопрос нет.

RedHead90
13.06.2018, 20:31
Да я это не с целью кого-то упрекнуть написал. Грабли известные, но чаще вместо того, чтобы целый день ломать себе голову на таких граблях, а потом еще день ждать, пока кто-то ответит на форуме, проще и быстрее залезть в хелп и самому разобраться.

Например, автор принимает первым параметром component: DisplayObject. Идем в хелп в раздел события и видим, что DisplayObject генерирует всего 10 событий и ни одного из тех трех, на которые он подписывается. Это не прямой ответ, да, но этой информации уже достаточно, чтобы понять, где кроется ошибка и куда дальше копать.

undefined
13.06.2018, 21:48
Идем в хелп в раздел события и видим, что DisplayObject генерирует всего 10 событий и ни одного из тех трех, на которые он подписывается.
т.е. DisplayObject на мышь не реагирует? :)
Тогда уж надо так:
1)идем в DisplayObject,выписываем его ивенты на бумажку
2)добавляем ивенты из интерфейсов
3)Повторяем 1-2 для Bitmap
4)Сравниваем списки и постигаем дзен.

RedHead90
14.06.2018, 00:03
Адобовский хелп очень подробный и очень круто сделан. Там сразу видно, какие события наследуются, а какие генерирует сам класс. Поэтому ничего выписывать не придется, ведь у Bitmap собственных событий нет.

СлаваRa
14.06.2018, 00:05
Нужен интерактив, меняем тип объекта с DisplayObject на InteractiveObject и забываем о проблемах :)

Wolsh
14.06.2018, 01:23
DisplayObject именно то, что можно запихнуть в контейнер, подписанный на мышиные вечеринки, и забыть о проблемах. Я бы даже, наоборот, отключил этому DO mouseEnabled, чтобы не отсвечивал. Вдруг туда какой-нибудь текстфилд кинут с иконкой-глифом.

СлаваRa
14.06.2018, 06:47
@Wolsh, в случае если тот самый component сирота :)

undefined
14.06.2018, 10:54
Адобовский хелп очень подробный и очень круто сделан. Там сразу видно, какие события наследуются, а какие генерирует сам класс.
Если бы это было так, ты бы не писал глупости про 10 событий у DisplayObject.

Поэтому ничего выписывать не придется, ведь у Bitmap собственных событий нет.
но у него есть унаследованные,которые все равно придется выписывать

RedHead90
14.06.2018, 13:46
Если бы это было так, ты бы не писал глупости про 10 событий у DisplayObject.

Может мы разный хелп читаем?

1. activate
2. deactivate
3. added
4. addedToStage
5. removed
6. removedFromStage
7. enterFrame
8. exitFrame
9. frameConstructed
10. render

У битмапы все тоже самое. Если нужна мышь, то нужно подписываться на InteractiveObject, у которого помимо этих еще более 50 событий.

undefined
14.06.2018, 14:45
Может мы разный хелп читаем?
DisplayObject шлет еще много чего помимо этих 10,но чтоб узнать это надо пройтись по всем интерфейсам т.е.

1)идем в DisplayObject,выписываем его ивенты на бумажку
2)добавляем ивенты из интерфейсов
3)Повторяем 1-2 для Bitmap
4)Сравниваем списки и постигаем дзен.
Вообщем я к тому,что вместо штудирования хелпа можно было бы за 30 сек загуглить ответ.

RedHead90
14.06.2018, 15:52
undefined, не знаю, откуда ты это взял, но то, что ты пишешь, совершенно не соответствует действительности. Какие еще ивенты из интерфейсов? DO реализует только ОДИН интерфейс IBitmapDrawable и никаких ивентов, кроме 10 вышеперечисленных у DO больше нет.

undefined
14.06.2018, 16:29
а туплю,InteractiveObject - потомок DO :D