Просмотр полной версии : Работает со 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 собственных событий нет.
Нужен интерактив, меняем тип объекта с DisplayObject на InteractiveObject и забываем о проблемах :)
DisplayObject именно то, что можно запихнуть в контейнер, подписанный на мышиные вечеринки, и забыть о проблемах. Я бы даже, наоборот, отключил этому DO mouseEnabled, чтобы не отсвечивал. Вдруг туда какой-нибудь текстфилд кинут с иконкой-глифом.
@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
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.